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

ruby-changes:7564

From: akr <ko1@a...>
Date: Wed, 3 Sep 2008 20:07:34 +0900 (JST)
Subject: [ruby-changes:7564] Ruby:r19085 (trunk): * tool/transcode-tblgen.rb (ActionMap#gen_array_code): extracted from

akr	2008-09-03 20:07:16 +0900 (Wed, 03 Sep 2008)

  New Revision: 19085

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19085

  Log:
    * tool/transcode-tblgen.rb (ActionMap#gen_array_code): extracted from
      generate_lookup_node.
      (ActionMap#numelt_array_code): ditto.
      (ActionMap#array_code_insert_at_last): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/tool/transcode-tblgen.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19084)
+++ ChangeLog	(revision 19085)
@@ -1,3 +1,10 @@
+Wed Sep  3 20:04:33 2008  Tanaka Akira  <akr@f...>
+
+	* tool/transcode-tblgen.rb (ActionMap#gen_array_code): extracted from
+	  generate_lookup_node.
+	  (ActionMap#numelt_array_code): ditto.
+	  (ActionMap#array_code_insert_at_last): ditto.
+
 Wed Sep  3 20:01:01 2008  Tanaka Akira  <akr@f...>
 
 	* parse.y (parser_encoding_name): defined.
Index: tool/transcode-tblgen.rb
===================================================================
--- tool/transcode-tblgen.rb	(revision 19084)
+++ tool/transcode-tblgen.rb	(revision 19085)
@@ -298,6 +298,26 @@
     code
   end
 
+  def gen_array_code(type, name)
+    <<"End"
+static const #{type}
+#{name}[0] = {
+};
+End
+  end
+
+  def numelt_array_code(code)
+    code[/\[\d+\]/][1...-1].to_i
+  end
+
+  def array_code_insert_at_last(code, num, str)
+    newnum = numelt_array_code(code) + num
+    code.sub!(/^(\};\n\z)/) {
+      str + $1
+    }
+    code.sub!(/\[\d+\]/) { "[#{newnum}]" }
+  end
+
   def generate_lookup_node(bytes_code, words_code, name, table)
     offsets = []
     infos = []
@@ -326,28 +346,16 @@
       offsets_name = "#{name}_offsets"
       OffsetsMemo[offsets_key] = offsets_name
       if bytes_code.empty?
-        bytes_code << <<"End"
-static const unsigned char
-#{OUTPUT_PREFIX}byte_array[0] = {
-};
-End
+        bytes_code << gen_array_code("unsigned char", "#{OUTPUT_PREFIX}byte_array")
       end
-      size = bytes_code[/\[\d+\]/][1...-1].to_i
-      bytes_code.sub!(/^(\};\n\z)/) {
+      size = numelt_array_code(bytes_code)
+      array_code_insert_at_last(bytes_code, 2+max-min+1,
         "\#define #{offsets_name} #{size}\n" +
-        format_offsets(min,max,offsets) + "\n" +
-        $1
-      }
-      size += 2+max-min+1
-      bytes_code.sub!(/\[\d+\]/) { "[#{size}]" }
+        format_offsets(min,max,offsets) + "\n")
     end
 
     if words_code.empty?
-      words_code << <<"End"
-static const unsigned int
-#{OUTPUT_PREFIX}word_array[0] = {
-};
-End
+      words_code << gen_array_code("unsigned int", "#{OUTPUT_PREFIX}word_array")
     end
 
     if n = InfosMemo[infos]
@@ -356,26 +364,19 @@
       infos_name = "#{name}_infos"
       InfosMemo[infos] = infos_name
 
-      size = words_code[/\[\d+\]/][1...-1].to_i
-      words_code.sub!(/^(\};\n\z)/) {
+      size = numelt_array_code(words_code)
+      array_code_insert_at_last(words_code, infos.length,
         "\#define #{infos_name} (sizeof(unsigned int)*#{size})\n" +
-        format_infos(infos) + "\n" +
-        $1
-      }
-      size += infos.length
-      words_code.sub!(/\[\d+\]/) { "[#{size}]" }
+        format_infos(infos) + "\n")
     end
 
-    size = words_code[/\[\d+\]/][1...-1].to_i
-    words_code.sub!(/^(\};\n\z)/) {
+    size = numelt_array_code(words_code)
+    array_code_insert_at_last(words_code, NUM_ELEM_BYTELOOKUP,
       "\#define #{name} (sizeof(unsigned int)*#{size})\n" +
-      <<"End" + "\n" + $1
+      <<"End" + "\n")
     #{offsets_name},
     #{infos_name},
 End
-    }
-    size += NUM_ELEM_BYTELOOKUP
-    words_code.sub!(/\[\d+\]/) { "[#{size}]" }
   end
 
   PreMemo = {}

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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