mirror of https://github.com/tailix/mrubyvisor.git
Ruby modules actually do something
This commit is contained in:
parent
a6b1853851
commit
3345488f47
|
@ -2,4 +2,5 @@ set timeout=0
|
|||
|
||||
menuentry "mrubyvisor" {
|
||||
multiboot2 /boot/mrubyvisor.multiboot2
|
||||
module2 /boot/hello.rb
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
console_puts 'Hello, World! Ruby modules work!'
|
21
src/main.c
21
src/main.c
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue