From 5a6a084a976a5c5cc8654a902906b812e6d101d5 Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 1 Sep 2008 13:21:06 +0000 Subject: * tool/transcode-tblgen.rb: make offsets arrays into single array. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19032 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- tool/transcode-tblgen.rb | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'tool') diff --git a/tool/transcode-tblgen.rb b/tool/transcode-tblgen.rb index ecacd9350..507b56f50 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] -- cgit