summaryrefslogtreecommitdiff
path: root/mini_builtin.c
diff options
Diffstat (limited to 'mini_builtin.c')
-rw-r--r--mini_builtin.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/mini_builtin.c b/mini_builtin.c
index adcb4f965f..4e5fe98f93 100644
--- a/mini_builtin.c
+++ b/mini_builtin.c
@@ -1,5 +1,6 @@
#include "internal.h"
#include "internal/array.h"
+#include "internal/eval.h"
#include "iseq.h"
#include "vm_core.h"
#include "builtin.h"
@@ -95,9 +96,23 @@ builtin_iseq_load(const char *feature_name, const struct rb_builtin_function *ta
return iseq;
}
+static void
+load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table)
+{
+ const rb_iseq_t *iseq = builtin_iseq_load(feature_name, table);
+ rb_namespace_enable_builtin();
+ rb_iseq_eval_with_refinement(iseq, rb_mNamespaceRefiner);
+ rb_namespace_disable_builtin();
+}
+
void
rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table)
{
- const rb_iseq_t *iseq = builtin_iseq_load(feature_name, table);
- rb_iseq_eval(iseq);
+ const rb_iseq_t *iseq;
+ if (rb_namespace_available() && rb_mNamespaceRefiner) {
+ load_with_builtin_functions(feature_name, table);
+ } else {
+ iseq = builtin_iseq_load(feature_name, table);
+ rb_iseq_eval(iseq);
+ }
}