ruby-changes:7524
From: akr <ko1@a...>
Date: Tue, 2 Sep 2008 03:07:00 +0900 (JST)
Subject: [ruby-changes:7524] Ruby:r19045 (trunk): * tool/transcode-tblgen.rb: record infos and BYTE_LOOKUPs as index of
akr 2008-09-02 03:06:28 +0900 (Tue, 02 Sep 2008) New Revision: 19045 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19045 Log: * 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. Modified files: trunk/ChangeLog trunk/tool/transcode-tblgen.rb trunk/transcode.c trunk/transcode_data.h Index: ChangeLog =================================================================== --- ChangeLog (revision 19044) +++ ChangeLog (revision 19045) @@ -1,3 +1,14 @@ +Tue Sep 2 03:04:33 2008 Tanaka Akira <akr@f...> + + * 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@f...> * tool/transcode-tblgen.rb: don't need to cast offsets array. Index: transcode_data.h =================================================================== --- transcode_data.h (revision 19044) +++ transcode_data.h (revision 19045) @@ -19,7 +19,7 @@ typedef uintptr_t BYTE_LOOKUP[2]; #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 /* data file needs to treat this as a pointer, to remove warnings */ Index: tool/transcode-tblgen.rb =================================================================== --- tool/transcode-tblgen.rb (revision 19044) +++ tool/transcode-tblgen.rb (revision 19045) @@ -358,7 +358,7 @@ size = words_code[/\[\d+\]/][1...-1].to_i 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" + $1 } @@ -368,7 +368,7 @@ size = words_code[/\[\d+\]/][1...-1].to_i words_code.sub!(/^(\};\n\z)/) { - "\#define #{name} ((uintptr_t)(word_array+#{size}))\n" + + "\#define #{name} (sizeof(uintptr_t)*#{size})\n" + <<"End" + "\n" + $1 #{offsets_name}, #{infos_name}, Index: transcode.c =================================================================== --- transcode.c (revision 19044) +++ transcode.c (revision 19045) @@ -480,7 +480,7 @@ 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 @@ 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 @@ 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; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/