summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin.c2
-rw-r--r--builtin.h2
-rw-r--r--mini_builtin.c26
-rw-r--r--tool/mk_builtin_loader.rb3
4 files changed, 6 insertions, 27 deletions
diff --git a/builtin.c b/builtin.c
index d936d1ceb6..bcc5dc61a4 100644
--- a/builtin.c
+++ b/builtin.c
@@ -18,7 +18,7 @@ builtin_lookup(const char *feature, size_t *psize)
}
void
-rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table)
+rb_load_with_builtin_functions(const char *feature_name, const char *fname, const struct rb_builtin_function *table)
{
// search binary
size_t size;
diff --git a/builtin.h b/builtin.h
index ee99e21dcc..ef6ff82236 100644
--- a/builtin.h
+++ b/builtin.h
@@ -12,7 +12,7 @@ struct rb_builtin_function {
#define RB_BUILTIN_FUNCTION(_i, _name, _arity) { .name = #_name, .func_ptr = (void *)_name, .argc = _arity, .index = _i }
-void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table);
+void rb_load_with_builtin_functions(const char *feature_name, const char *fname, const struct rb_builtin_function *table);
#ifndef VM_CORE_H_EC_DEFINED
typedef struct rb_execution_context_struct rb_execution_context_t;
diff --git a/mini_builtin.c b/mini_builtin.c
index 060c955fcb..dc95919da2 100644
--- a/mini_builtin.c
+++ b/mini_builtin.c
@@ -36,23 +36,12 @@ read_file(const char *fname, size_t *psize)
}
static struct st_table *loaded_builtin_table;
-static char srcdir[0x200];
-static const char fname[] = "mini_builtin.c";
-
-static const char *
-feature_path(const char *name)
-{
- static char path[0x200];
- snprintf(path, 0x200-1, "%s%s.rb", srcdir, name);
- // fprintf(stderr, "srcdir:%s, path:%s, PATH_SEP_CHAR:%c\n", srcdir, path, PATH_SEP_CHAR);
- return path;
-}
void
-rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table)
+rb_load_with_builtin_functions(const char *feature_name, const char *fname, const struct rb_builtin_function *table)
{
size_t fsize;
- const char *code = read_file(feature_path(feature_name), &fsize);
+ const char *code = read_file(fname, &fsize);
VALUE code_str = rb_utf8_str_new_static(code, fsize);
VALUE name_str = rb_sprintf("<internal:%s>", feature_name);
rb_obj_hide(code_str);
@@ -97,15 +86,4 @@ Init_builtin(void)
{
rb_define_singleton_method(rb_cRubyVM, "each_builtin", each_builtin, 0);
loaded_builtin_table = st_init_strtable();
-
- // check srcdir
- // assume __FILE__ encoding is ASCII compatible.
- int pos = strlen(__FILE__) - strlen(fname);
- if (pos < 0) rb_bug("strlen(%s) - strlen(%s) < 0", __FILE__, fname);
-
- if (strcmp(__FILE__ + pos, fname) != 0) {
- rb_bug("%s does not terminate with %s\n", __FILE__, fname);
- }
- strncpy(srcdir, __FILE__, 0x200-1);
- srcdir[pos] = 0;
}
diff --git a/tool/mk_builtin_loader.rb b/tool/mk_builtin_loader.rb
index f00e2fe26f..87b5e2ab76 100644
--- a/tool/mk_builtin_loader.rb
+++ b/tool/mk_builtin_loader.rb
@@ -67,9 +67,10 @@ def mk_builtin_header file
f.puts "COMPILER_WARNING_POP"
+ path = File.expand_path(file)
f.puts
f.puts " // load"
- f.puts " rb_load_with_builtin_functions(\"#{base}\", #{table});"
+ f.puts " rb_load_with_builtin_functions(\"#{base}\", \"#{file}\", #{table});"
f.puts "}"
}