summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--tool/transcode-tblgen.rb22
2 files changed, 19 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 11f09dad2b..ea308a7330 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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]