[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]