* 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
This commit is contained in:
parent
03ec9b1aac
commit
339dfc32a7
@ -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>
|
Mon Sep 1 21:46:18 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* tool/transcode-tblgen.rb: gather offsets array at top.
|
* tool/transcode-tblgen.rb: gather offsets array at top.
|
||||||
|
@ -236,7 +236,7 @@ class ActionMap
|
|||||||
|
|
||||||
def format_offsets(min, max, offsets)
|
def format_offsets(min, max, offsets)
|
||||||
offsets = offsets[min..max]
|
offsets = offsets[min..max]
|
||||||
code = "{ %d, %d,\n" % [min, max]
|
code = "%d, %d,\n" % [min, max]
|
||||||
0.step(offsets.length-1,16) {|i|
|
0.step(offsets.length-1,16) {|i|
|
||||||
code << " "
|
code << " "
|
||||||
code << offsets[i,8].map {|off| "%3d," % off.to_s }.join('')
|
code << offsets[i,8].map {|off| "%3d," % off.to_s }.join('')
|
||||||
@ -246,7 +246,6 @@ class ActionMap
|
|||||||
end
|
end
|
||||||
code << "\n"
|
code << "\n"
|
||||||
}
|
}
|
||||||
code << '}'
|
|
||||||
code
|
code
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -322,15 +321,24 @@ class ActionMap
|
|||||||
offsets_key = [min, max, offsets[min..max]]
|
offsets_key = [min, max, offsets[min..max]]
|
||||||
if n = OffsetsMemo[offsets_key]
|
if n = OffsetsMemo[offsets_key]
|
||||||
offsets_name = n
|
offsets_name = n
|
||||||
offsets_code = ''
|
|
||||||
else
|
else
|
||||||
offsets_name = "#{name}_offsets"
|
offsets_name = "#{name}_offsets"
|
||||||
offsets_code = <<"End"
|
|
||||||
static const unsigned char
|
|
||||||
#{offsets_name}[#{2+max-min+1}] = #{format_offsets(min,max,offsets)};
|
|
||||||
End
|
|
||||||
OffsetsMemo[offsets_key] = offsets_name
|
OffsetsMemo[offsets_key] = offsets_name
|
||||||
bytes_code << offsets_code
|
if bytes_code.empty?
|
||||||
|
bytes_code << <<"End"
|
||||||
|
static const unsigned char
|
||||||
|
byte_array[0] = {
|
||||||
|
};
|
||||||
|
End
|
||||||
|
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
|
end
|
||||||
|
|
||||||
if n = InfosMemo[infos]
|
if n = InfosMemo[infos]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user