Ruby modules actually do something

This commit is contained in:
Alex Kotov 2022-11-29 00:13:27 +04:00
parent a6b1853851
commit 3345488f47
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
3 changed files with 23 additions and 0 deletions

View File

@ -2,4 +2,5 @@ set timeout=0
menuentry "mrubyvisor" {
multiboot2 /boot/mrubyvisor.multiboot2
module2 /boot/hello.rb
}

1
rootfs/boot/hello.rb Normal file
View File

@ -0,0 +1 @@
console_puts 'Hello, World! Ruby modules work!'

View File

@ -34,6 +34,8 @@ static void *my_realloc(void *ptr, size_t size);
static bool load_module(const char *source, size_t size, const char *cmdline);
static mrb_value ruby_console_puts(mrb_state *mrb, mrb_value self);
void main(
const uint32_t multiboot2_info_magic,
const struct KernAux_Multiboot2_Info *const multiboot2_info
@ -53,6 +55,15 @@ void main(
ASSERT(mrb = mrb_open());
ASSERT(context = mrbc_context_new(mrb));
// Define method Kernel#console_puts
mrb_define_method(
mrb,
mrb->kernel_module,
"console_puts",
ruby_console_puts,
MRB_ARGS_REQ(1)
);
for (
const struct KernAux_Multiboot2_ITag_Module *module_tag =
(const struct KernAux_Multiboot2_ITag_Module*)
@ -125,3 +136,13 @@ bool load_module(
mrb_gc_arena_restore(mrb, arena);
return status;
}
mrb_value ruby_console_puts(
mrb_state *const mrb,
mrb_value self __attribute__((unused))
) {
const char *str = NULL;
mrb_get_args(mrb, "z", &str);
kernaux_drivers_console_puts(str);
return mrb_nil_value();
}