diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-01 13:21:06 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-01 13:21:06 +0000 |
commit | 339dfc32a7854104729f8a334b64d272550781f9 (patch) | |
tree | 76587803dd5b9e267a81df36e62f50df2098bf2c | |
parent | 03ec9b1aac4281490de9912a93892e30af5a8158 (diff) | |
download | ruby-339dfc32a7854104729f8a334b64d272550781f9.tar.gz |
* tool/transcode-tblgen.rb: make offsets arrays into single array.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19032 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | tool/transcode-tblgen.rb | 22 |
2 files changed, 19 insertions, 7 deletions
@@ -1,3 +1,7 @@ +Mon Sep 1 22:20:22 2008 Tanaka Akira <akr@fsij.org> + + * tool/transcode-tblgen.rb: make offsets arrays into single array. + Mon Sep 1 21:46:18 2008 Tanaka Akira <akr@fsij.org> * tool/transcode-tblgen.rb: gather offsets array at top. diff --git a/tool/transcode-tblgen.rb b/tool/transcode-tblgen.rb index ecacd93509..507b56f503 100644 --- a/tool/transcode-tblgen.rb +++ b/tool/transcode-tblgen.rb @@ -236,7 +236,7 @@ class ActionMap def format_offsets(min, max, offsets) offsets = offsets[min..max] - code = "{ %d, %d,\n" % [min, max] + code = "%d, %d,\n" % [min, max] 0.step(offsets.length-1,16) {|i| code << " " code << offsets[i,8].map {|off| "%3d," % off.to_s }.join('') @@ -246,7 +246,6 @@ class ActionMap end code << "\n" } - code << '}' code end @@ -322,15 +321,24 @@ class ActionMap offsets_key = [min, max, offsets[min..max]] if n = OffsetsMemo[offsets_key] offsets_name = n - offsets_code = '' else offsets_name = "#{name}_offsets" - offsets_code = <<"End" + OffsetsMemo[offsets_key] = offsets_name + if bytes_code.empty? + bytes_code << <<"End" static const unsigned char -#{offsets_name}[#{2+max-min+1}] = #{format_offsets(min,max,offsets)}; +byte_array[0] = { +}; End - OffsetsMemo[offsets_key] = offsets_name - bytes_code << offsets_code + end + size = bytes_code[/\[\d+\]/][1...-1].to_i + bytes_code.sub!(/^(\};\n\z)/) { + "\#define #{offsets_name} (byte_array+#{size})\n" + + format_offsets(min,max,offsets) + "\n" + + $1 + } + size += 2+max-min+1 + bytes_code.sub!(/\[\d+\]/) { "[#{size}]" } end if n = InfosMemo[infos] |