diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-26 03:50:43 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-26 03:50:43 +0000 |
commit | 6e3d6971712ccdf87a69151c938065368b010051 (patch) | |
tree | a69870a5e144e27689ebe63435fa87e562fdc585 | |
parent | 48b9605604b53ba526c0263a89d9632e2c958dd1 (diff) | |
download | ruby-6e3d6971712ccdf87a69151c938065368b010051.tar.gz |
* ricsin/ricsin.rb: fix $0 and fix to output ricsin_#{name}.rb.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ricsin@19568 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ricsin/ChangeLog | 4 | ||||
-rw-r--r-- | ricsin/ricsin.rb | 26 | ||||
-rw-r--r-- | ricsin/t.rcb | 8 |
3 files changed, 34 insertions, 4 deletions
diff --git a/ricsin/ChangeLog b/ricsin/ChangeLog index 60e7b76a92..e5466a3bf0 100644 --- a/ricsin/ChangeLog +++ b/ricsin/ChangeLog @@ -1,3 +1,7 @@ +Fri Sep 26 12:49:52 2008 Koichi Sasada <ko1@atdot.net>
+
+ * ricsin/ricsin.rb: fix $0 and fix to output ricsin_#{name}.rb.
+
Wed Sep 24 17:42:30 2008 Koichi Sasada <ko1@atdot.net>
* ricsin/test.rcb: add 2 assersions.
diff --git a/ricsin/ricsin.rb b/ricsin/ricsin.rb index 2967b3b759..9fb63618c8 100644 --- a/ricsin/ricsin.rb +++ b/ricsin/ricsin.rb @@ -15,8 +15,8 @@ class Ricsin @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 @@ class Ricsin def run raise unless @out_so require @out_so + ::RICSIN_ISEQMAP[@so_basename].eval end def generate @@ -37,6 +38,15 @@ class Ricsin 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 @@ -75,7 +85,7 @@ class Ricsin 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 @@ Init_#{@so_basename}(void) 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 @@ Init_#{@so_basename}(void) 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 diff --git a/ricsin/t.rcb b/ricsin/t.rcb index 450bc76f8c..c032c8a450 100644 --- a/ricsin/t.rcb +++ b/ricsin/t.rcb @@ -1,3 +1,11 @@ +p $0 +p $0 == __FILE__ + +__END__ +p $0 +p $" + +__END__ $foo = 42 p __C__('return $foo; /* $foo */') |