summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-26 03:50:43 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-26 03:50:43 +0000
commit6e3d6971712ccdf87a69151c938065368b010051 (patch)
treea69870a5e144e27689ebe63435fa87e562fdc585
parent48b9605604b53ba526c0263a89d9632e2c958dd1 (diff)
downloadruby-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/ChangeLog4
-rw-r--r--ricsin/ricsin.rb26
-rw-r--r--ricsin/t.rcb8
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 */')