diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | common.mk | 5 | ||||
-rw-r--r-- | inits.c | 2 | ||||
-rw-r--r-- | prelude.rb | 14 | ||||
-rw-r--r-- | thread.c | 6 | ||||
-rw-r--r-- | tool/compile_prelude.rb | 25 |
6 files changed, 60 insertions, 6 deletions
@@ -1,3 +1,17 @@ +Sat Aug 25 00:22:31 2007 Koichi Sasada <ko1@atdot.net> + + * prelude.rb: added. run this script on startup. + + * tool/compile_prelude.rb: compile prelude.rb to C string. + (prelude.rb -> prelude.c) + + * common.mk: fix to build with prelude.c. + + * inits.c (rb_call_inits): ditto. + + * thread.c (Init_Thread): move definition of Mutex#synchronize + to prelude.rb. + Sat Aug 25 00:08:43 2007 Koichi Sasada <ko1@atdot.net> * compile.c (compile_massign_opt): fix to skip massign optimization @@ -76,6 +76,7 @@ OBJS = array.$(OBJEXT) \ thread.$(OBJEXT) \ cont.$(OBJEXT) \ id.$(OBJEXT) \ + prelude.$(OBJEXT) \ $(MISSING) SCRIPT_ARGS = --dest-dir="$(DESTDIR)" \ @@ -588,6 +589,7 @@ blockinlining.$(OBJEXT): {$(VPATH)}blockinlining.c \ {$(VPATH)}debug.h {$(VPATH)}vm_opts.h \ {$(VPATH)}thread_$(THREAD_MODEL).h id.$(OBJEXT): {$(VPATH)}id.c {$(VPATH)}ruby.h +prelude.$(OBJEXT): {$(VPATH)}prelude.c {$(VPATH)}ruby.h MATZRUBY = $(MATZRUBYDIR)ruby @@ -621,6 +623,9 @@ incs: $(INSNS) node_name.inc node_name.inc: {$(VPATH)}node.h $(BASERUBY) -n $(srcdir)/tool/node_name.rb $? > $@ +prelude.c: {$(VPATH)}prelude.rb + $(BASERUBY) $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb prelude.c + docs: $(BASERUBY) -I$(srcdir) $(srcdir)/tool/makedocs.rb $(INSNS2VMOPT) @@ -51,6 +51,7 @@ void Init_VM(void); void Init_Thread(void); void Init_Cont(void); void Init_top_self(void); +void Init_prelude(void); void rb_call_inits() @@ -94,4 +95,5 @@ rb_call_inits() Init_Thread(); Init_Cont(); Init_version(); + Init_prelude(); } diff --git a/prelude.rb b/prelude.rb new file mode 100644 index 0000000000..423c9c423e --- /dev/null +++ b/prelude.rb @@ -0,0 +1,14 @@ + +# Mutex + +class Mutex + class Mutex + def synchronize + self.lock + yield + ensure + self.unlock + end + end +end + @@ -2968,12 +2968,6 @@ Init_Thread(void) rb_define_method(rb_cMutex, "unlock", rb_mutex_unlock, 0); rb_define_method(rb_cMutex, "sleep", mutex_sleep, -1); - rb_iseq_eval(rb_iseq_compile( - rb_str_new2("class Mutex;" - " def synchronize; self.lock; yield; ensure; self.unlock; end;" - "end;"), - rb_str_new2(__FILE__), INT2FIX(__LINE__))); - recursive_key = rb_intern("__recursive_key__"); rb_eThreadError = rb_define_class("ThreadError", rb_eStandardError); diff --git a/tool/compile_prelude.rb b/tool/compile_prelude.rb new file mode 100644 index 0000000000..13ccb8aced --- /dev/null +++ b/tool/compile_prelude.rb @@ -0,0 +1,25 @@ + +prelude, outfile = *ARGV +lines = [] + +File.readlines(prelude).each{|line| + lines << "#{line.dump}" +} + +open(outfile, 'w'){|f| +f.puts <<EOS__ + +#include "ruby/ruby.h" +static const char *prelude_code = +#{lines.join("\n")} +; +void +Init_prelude(void) +{ + rb_iseq_eval(rb_iseq_compile( + rb_str_new2(prelude_code), + rb_str_new2("prelude.rb"), INT2FIX(1))); +} +EOS__ +} + |