aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2019-11-15 03:51:06 +0900
committerKoichi Sasada <ko1@atdot.net>2019-11-15 03:55:46 +0900
commit9c1abe2a6c5e6288ed208000fbf811d145af9355 (patch)
treef28651846facc692cb7667ca5496d24741fd1a49
parentc9ffe751d126a302d0e7e53e645e44084e339dde (diff)
downloadruby-9c1abe2a6c5e6288ed208000fbf811d145af9355.tar.gz
load prelude.rb by builtin features.
The script in prelude.rb was embed in MRI to load it (eval this script at everyboot). This commit change the loading process of prelude.rb. MRI doesn't eval a script, but load from compiled binary with builtin feature. So that Init_prelude() does not load `prelude.rb` now.
-rw-r--r--common.mk6
-rw-r--r--inits.c4
-rw-r--r--template/prelude.c.tmpl2
3 files changed, 9 insertions, 3 deletions
diff --git a/common.mk b/common.mk
index e382b22a66..b117008561 100644
--- a/common.mk
+++ b/common.mk
@@ -163,7 +163,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS)
GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT)
DEFAULT_PRELUDES = $(GEM_PRELUDE)
-PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(DEFAULT_PRELUDES)
+PRELUDE_SCRIPTS = $(DEFAULT_PRELUDES)
GEM_PRELUDE = $(srcdir)/gem_prelude.rb
PRELUDES = {$(srcdir)}prelude.c {$(srcdir)}miniprelude.c
GOLFPRELUDES = {$(srcdir)}golf_prelude.c
@@ -1000,6 +1000,7 @@ BUILTIN_RB_SRCS = \
$(srcdir)/io.rb \
$(srcdir)/pack.rb \
$(srcdir)/trace_point.rb \
+ $(srcdir)/prelude.rb \
$(empty)
BUILTIN_RB_INCS = $(BUILTIN_RB_SRCS:.rb=.rbinc)
@@ -2231,6 +2232,8 @@ inits.$(OBJEXT): {$(VPATH)}onigmo.h
inits.$(OBJEXT): {$(VPATH)}oniguruma.h
inits.$(OBJEXT): {$(VPATH)}st.h
inits.$(OBJEXT): {$(VPATH)}subst.h
+inits.$(OBJEXT): {$(VPATH)}builtin.h
+inits.$(OBJEXT): {$(VPATH)}prelude.rbinc
io.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
io.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
io.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -2689,7 +2692,6 @@ prelude.$(OBJEXT): {$(VPATH)}node.h
prelude.$(OBJEXT): {$(VPATH)}onigmo.h
prelude.$(OBJEXT): {$(VPATH)}oniguruma.h
prelude.$(OBJEXT): {$(VPATH)}prelude.c
-prelude.$(OBJEXT): {$(VPATH)}prelude.rb
prelude.$(OBJEXT): {$(VPATH)}ruby_assert.h
prelude.$(OBJEXT): {$(VPATH)}ruby_atomic.h
prelude.$(OBJEXT): {$(VPATH)}st.h
diff --git a/inits.c b/inits.c
index 9ced248618..490506e3bf 100644
--- a/inits.c
+++ b/inits.c
@@ -10,6 +10,8 @@
**********************************************************************/
#include "internal.h"
+#include "builtin.h"
+#include "prelude.rbinc"
#define CALL(n) {void Init_##n(void); Init_##n();}
@@ -66,6 +68,7 @@ rb_call_inits(void)
CALL(vm_stack_canary);
CALL(gc_stress);
+ // enable builtin loading
CALL(builtin);
CALL(GC);
@@ -73,5 +76,6 @@ rb_call_inits(void)
CALL(ast);
CALL(vm_trace);
CALL(pack);
+ load_prelude();
}
#undef CALL
diff --git a/template/prelude.c.tmpl b/template/prelude.c.tmpl
index 33f6a68be0..e3cbbaab58 100644
--- a/template/prelude.c.tmpl
+++ b/template/prelude.c.tmpl
@@ -38,7 +38,7 @@ class Prelude
@builtin_count = 0
@preludes = {}
@mains = preludes.map do |filename|
- if prelude = filename.end_with?("prelude.rb")
+ if prelude = filename.end_with?("_prelude.rb")
@prelude_count += 1
else
@builtin_count += 1