[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]