ruby-changes:8043
From: ko1 <ko1@a...>
Date: Fri, 26 Sep 2008 12:50:51 +0900 (JST)
Subject: [ruby-changes:8043] Ruby:r19568 (ricsin): * ricsin/ricsin.rb: fix $0 and fix to output ricsin_#{name}.rb.
ko1 2008-09-26 12:50:43 +0900 (Fri, 26 Sep 2008) New Revision: 19568 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19568 Log: * ricsin/ricsin.rb: fix $0 and fix to output ricsin_#{name}.rb. Modified files: branches/ricsin/ricsin/ChangeLog branches/ricsin/ricsin/ricsin.rb branches/ricsin/ricsin/t.rcb Index: ricsin/ricsin/ChangeLog =================================================================== --- ricsin/ricsin/ChangeLog (revision 19567) +++ ricsin/ricsin/ChangeLog (revision 19568) @@ -1,3 +1,7 @@ +Fri Sep 26 12:49:52 2008 Koichi Sasada <ko1@a...> + + * ricsin/ricsin.rb: fix $0 and fix to output ricsin_#{name}.rb. + Wed Sep 24 17:42:30 2008 Koichi Sasada <ko1@a...> * ricsin/test.rcb: add 2 assersions. Index: ricsin/ricsin/t.rcb =================================================================== --- ricsin/ricsin/t.rcb (revision 19567) +++ ricsin/ricsin/t.rcb (revision 19568) @@ -1,4 +1,12 @@ +p $0 +p $0 == __FILE__ +__END__ +p $0 +p $" + +__END__ + $foo = 42 p __C__('return $foo; /* $foo */') Index: ricsin/ricsin/ricsin.rb =================================================================== --- ricsin/ricsin/ricsin.rb (revision 19567) +++ ricsin/ricsin/ricsin.rb (revision 19568) @@ -15,8 +15,8 @@ @basename = File.basename(file, '.rcb') @output_dir = option[:output_dir] @src_rcb = file - @out_rb = File.join(@output_dir, "#{@basename}.rb") - @out_c = File.join(@output_dir, "#{@basename}.c") + @out_rb = File.join(@output_dir, "ricsin_#{@basename}.rb") + @out_c = File.join(@output_dir, "ricsin_#{@basename}.c") @out_so = nil @so_basename = "ricsin_#{@basename}" @src = nil @@ -27,6 +27,7 @@ def run raise unless @out_so require @out_so + ::RICSIN_ISEQMAP[@so_basename].eval end def generate @@ -37,8 +38,17 @@ generate_csrc generate_dll + generate_rb end + def generate_rb + open(@out_rb, 'wb'){|f| + f.puts "require '#{@so_basename}.so'" + f.puts "$0 = '#{@basename}.rcb' if $0 == __FILE__" + f.puts "::RICSIN_ISEQMAP['#{@so_basename}'].eval" + } + end + def preprocess file # #C cexpr => __Cx__ %q{ cexpr }, 0 # #C:10 cexpr => __Cx__ %q{ cexpr }, 10 @@ -75,7 +85,7 @@ system("#{ruby} extconf.rb") else cmd = "#{ruby} -r mkmf -e "\ - "'$objs=[#{(File.basename(@src_rcb, '.rcb')+'.o').dump}]; " \ + "'$objs=[#{(File.basename(@out_c, '.c')+'.o').dump}]; " \ "create_makefile(#{@so_basename.dump})'" system(cmd) end or raise "extconf" @@ -152,6 +162,7 @@ VALUE file = rb_str_new2("#{File.basename(@src_rcb)}"); VALUE line = INT2FIX(1); VALUE opt = rb_hash_new(); + VALUE map; VALUE iseq; #{ @@ -176,7 +187,14 @@ rb_io_puts(1, &disasm_str, rb_stdout); } - rb_iseq_eval(iseq); + if (rb_const_defined(rb_cObject, rb_intern("RICSIN_ISEQMAP"))) { + map = rb_const_get(rb_cObject, rb_intern("RICSIN_ISEQMAP")); + } + else { + map = rb_hash_new(); + rb_const_set(rb_cObject, rb_intern("RICSIN_ISEQMAP"), map); + } + rb_hash_aset(map, rb_str_new2("#{@so_basename}"), iseq); } EOS end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/