From 41e1933fd8df02d3244aa477f4f5a78d7ff12e65 Mon Sep 17 00:00:00 2001 From: akr Date: Tue, 2 Sep 2008 13:26:02 +0000 Subject: * transcode_data.h (base_element): removed. (BYTE_LOOKUP): removed. (BYTE_LOOKUP_BASE): don't cast. (BYTE_LOOKUP_INFO): ditto. (PType): unsigned int, instead of uintptr_t. (rb_transcoding): change type of next_field, conv_tree_start and word_array. * tool/transcode-tblgen.rb: generate word_array as array of unsigned int. * transcode.c (transcode_restartable0): follow the above type change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19070 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 15 +++++++++++++++ tool/transcode-tblgen.rb | 8 ++++---- transcode.c | 10 ++++++---- transcode_data.h | 16 ++++++---------- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9091febd25..8eeb8ffbf4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +Tue Sep 2 22:20:26 2008 Tanaka Akira + + * transcode_data.h (base_element): removed. + (BYTE_LOOKUP): removed. + (BYTE_LOOKUP_BASE): don't cast. + (BYTE_LOOKUP_INFO): ditto. + (PType): unsigned int, instead of uintptr_t. + (rb_transcoding): change type of next_field, conv_tree_start and + word_array. + + * tool/transcode-tblgen.rb: generate word_array as array of unsigned + int. + + * transcode.c (transcode_restartable0): follow the above type change. + Tue Sep 2 21:22:22 2008 Tanaka Akira * tool/transcode-tblgen.rb: add prefix for byte_array and word_array. diff --git a/tool/transcode-tblgen.rb b/tool/transcode-tblgen.rb index 96f2e8f640..4f77da725e 100644 --- a/tool/transcode-tblgen.rb +++ b/tool/transcode-tblgen.rb @@ -344,7 +344,7 @@ End if words_code.empty? words_code << <<"End" -static const uintptr_t +static const unsigned int #{OUTPUT_PREFIX}word_array[0] = { }; End @@ -358,7 +358,7 @@ End size = words_code[/\[\d+\]/][1...-1].to_i words_code.sub!(/^(\};\n\z)/) { - "\#define #{infos_name} (sizeof(uintptr_t)*#{size})\n" + + "\#define #{infos_name} (sizeof(unsigned int)*#{size})\n" + format_infos(infos) + "\n" + $1 } @@ -368,7 +368,7 @@ End size = words_code[/\[\d+\]/][1...-1].to_i words_code.sub!(/^(\};\n\z)/) { - "\#define #{name} (sizeof(uintptr_t)*#{size})\n" + + "\#define #{name} (sizeof(unsigned int)*#{size})\n" + <<"End" + "\n" + $1 #{offsets_name}, #{infos_name}, @@ -609,7 +609,7 @@ end def transcode_generated_code TRANSCODE_GENERATED_BYTES_CODE + TRANSCODE_GENERATED_WORDS_CODE + - "\#define TRANSCODE_TABLE_INFO #{OUTPUT_PREFIX}byte_array, #{OUTPUT_PREFIX}word_array, sizeof(uintptr_t)\n" + + "\#define TRANSCODE_TABLE_INFO #{OUTPUT_PREFIX}byte_array, #{OUTPUT_PREFIX}word_array, sizeof(unsigned int)\n" + TRANSCODE_GENERATED_TRANSCODER_CODE end diff --git a/transcode.c b/transcode.c index add97c9695..c6c828cbb4 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 = ((uintptr_t)tr->word_array) + tr->conv_tree_start; + next_table = tr->conv_tree_start; SUSPEND_OUTPUT_FOLLOWED_BY_INPUT(24); @@ -493,12 +493,14 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos, next_byte = (unsigned char)*in_p++; follow_byte: -#define BL_BASE(next_table) (tr->byte_array + BYTE_LOOKUP_BASE(next_table)) +#define BL_BASE(next_table) \ + (tr->byte_array + BYTE_LOOKUP_BASE(tr->word_array + next_table/sizeof(*tr->word_array))) if (next_byte < BL_BASE(next_table)[0] || BL_BASE(next_table)[1] < next_byte) next_info = INVALID; else { unsigned int next_offset = BL_BASE(next_table)[2+next_byte-BL_BASE(next_table)[0]]; -#define BL_INFO(next_table) ((const struct byte_lookup *const *)(((uintptr_t)tr->word_array) + BYTE_LOOKUP_INFO(next_table))) +#define BL_INFO(next_table) \ + (tr->word_array + BYTE_LOOKUP_INFO(tr->word_array + next_table/sizeof(*tr->word_array))/sizeof(*tr->word_array)) next_info = (VALUE)BL_INFO(next_table)[next_offset]; } follow_info: @@ -515,7 +517,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 = ((uintptr_t)tr->word_array) + next_info; + next_table = next_info; goto follow_byte; case ZERObt: /* drop input */ continue; diff --git a/transcode_data.h b/transcode_data.h index 14fb1336d1..90a946cce2 100644 --- a/transcode_data.h +++ b/transcode_data.h @@ -14,16 +14,12 @@ #ifndef RUBY_TRANSCODE_DATA_H #define RUBY_TRANSCODE_DATA_H 1 -typedef unsigned char base_element; - -typedef uintptr_t BYTE_LOOKUP[2]; - -#define BYTE_LOOKUP_BASE(bl) (((uintptr_t *)(bl))[0]) -#define BYTE_LOOKUP_INFO(bl) (((uintptr_t *)(bl))[1]) +#define BYTE_LOOKUP_BASE(bl) ((bl)[0]) +#define BYTE_LOOKUP_INFO(bl) ((bl)[1]) #ifndef PType /* data file needs to treat this as a pointer, to remove warnings */ -#define PType (uintptr_t) +#define PType (unsigned int) #endif #define NOMAP (PType 0x01) /* single byte direct map */ @@ -73,7 +69,7 @@ typedef struct rb_transcoding { int flags; int resume_position; - uintptr_t next_table; + unsigned int next_table; VALUE next_info; unsigned char next_byte; @@ -106,9 +102,9 @@ typedef struct rb_transcoding { struct rb_transcoder { const char *from_encoding; const char *to_encoding; - uintptr_t conv_tree_start; + unsigned int conv_tree_start; const unsigned char *byte_array; - const uintptr_t *word_array; + const unsigned int *word_array; int word_size; int input_unit_length; int max_input; -- cgit v1.2.3