diff options
Diffstat (limited to 'tool')
-rwxr-xr-x | tool/instruction.rb | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/tool/instruction.rb b/tool/instruction.rb index 4f7d08c369..45117950cf 100755 --- a/tool/instruction.rb +++ b/tool/instruction.rb @@ -453,9 +453,9 @@ class RubyVM pops.concat e_pops rets.concat e_rets defopes.concat e_defs - sp_inc += "#{insn.sp_inc}" + sp_inc << "#{insn.sp_inc}" - body += "{ /* unif: #{i} */\n" + + body << "{ /* unif: #{i} */\n" + passed_vars.map{|rpvars| pv = rpvars[0] rv = rpvars[1] @@ -463,15 +463,22 @@ class RubyVM }.join("\n") + "\n" + redef_vars.map{|v, type| - "#define #{v} #{v}_#{i}" - }.join("\n") + "\n" + - insn.body + - passed_vars.map{|rpvars| - "#undef #{rpvars[0][1]}" + "#{type} #{v} = #{v}_#{i};" + }.join("\n") + "\n" + if line = insn.body.instance_variable_get(:@line_no) + file = insn.body.instance_variable_get(:@file) + body << "#line #{line+1} \"#{file}\"\n" + body << insn.body + body << "\n#line __CURRENT_LINE__ \"__CURRENT_FILE__\"\n" + else + body << insn.body + end + body << redef_vars.keys.map{|v| + "#{v}_#{i} = #{v};" }.join("\n") + "\n" + - redef_vars.keys.map{|v| - "#undef #{v}" + passed_vars.map{|rpvars| + "#undef #{rpvars[0][1]}" }.join("\n") + "\n}\n" } @@ -893,7 +900,7 @@ class RubyVM commit insn.body commit '#line __CURRENT_LINE__ "__CURRENT_FILE__"' else - insn.body + commit insn.body end make_footer(insn) end |