00001
00002
00003
00004
00005
00006 #include "ruby/ruby.h"
00007 #include "internal.h"
00008 #include "vm_core.h"
00009
00010
00011 static const char prelude_name0[] = "<internal:prelude>";
00012 static const char prelude_code0[] =
00013 "class Mutex\n"
00014 " # call-seq:\n"
00015 " # mutex.synchronize { ... }\n"
00016 " #\n"
00017 " # Obtains a lock, runs the block, and releases the lock when the\n"
00018 " # block completes. See the example under Mutex.\n"
00019 " def synchronize\n"
00020 " self.lock\n"
00021 " begin\n"
00022 " yield\n"
00023 " ensure\n"
00024 " self.unlock rescue nil\n"
00025 " end\n"
00026 " end\n"
00027 "end\n"
00028 "\n"
00029 "class Thread\n"
00030 " MUTEX_FOR_THREAD_EXCLUSIVE = Mutex.new # :nodoc:\n"
00031 "\n"
00032 " # call-seq:\n"
00033 " # Thread.exclusive { block } => obj\n"
00034 " #\n"
00035 " # Wraps a block in Thread.critical, restoring the original value\n"
00036 " # upon exit from the critical section, and returns the value of the\n"
00037 " # block.\n"
00038 " def self.exclusive\n"
00039 " MUTEX_FOR_THREAD_EXCLUSIVE.synchronize{\n"
00040 " yield\n"
00041 " }\n"
00042 " end\n"
00043 "end\n"
00044 ;
00045
00046 static const char prelude_name1[] = "<internal:enc/prelude>";
00047 static const char prelude_code1[] =
00048 "%w'enc/encdb.so enc/trans/transdb.so'.each do |init|\n"
00049 " begin\n"
00050 " require(init)\n"
00051 " rescue LoadError\n"
00052 " end\n"
00053 "end\n"
00054 ;
00055
00056 static const char prelude_name2[] = "<internal:gem_prelude>";
00057 static const char prelude_code2[] =
00058 "require 'rubygems.rb' if defined?(Gem)\n"
00059 ;
00060
00061 #define PRELUDE_COUNT 0
00062
00063
00064 static void
00065 prelude_eval(VALUE code, VALUE name, VALUE line)
00066 {
00067 rb_iseq_eval(rb_iseq_compile_with_option(code, name, Qnil, line, Qtrue));
00068 }
00069
00070 void
00071 Init_prelude(void)
00072 {
00073 prelude_eval(
00074 rb_usascii_str_new(prelude_code0, sizeof(prelude_code0) - 1),
00075 rb_usascii_str_new(prelude_name0, sizeof(prelude_name0) - 1),
00076 INT2FIX(1));
00077 prelude_eval(
00078 rb_usascii_str_new(prelude_code1, sizeof(prelude_code1) - 1),
00079 rb_usascii_str_new(prelude_name1, sizeof(prelude_name1) - 1),
00080 INT2FIX(1));
00081 prelude_eval(
00082 rb_usascii_str_new(prelude_code2, sizeof(prelude_code2) - 1),
00083 rb_usascii_str_new(prelude_name2, sizeof(prelude_name2) - 1),
00084 INT2FIX(1));
00085
00086 #if 0
00087 puts(prelude_code0);
00088 puts(prelude_code1);
00089 puts(prelude_code2);
00090 #endif
00091 }
00092