Add basic scripting support.

- Fix certain bugs in ruby parser
- And a lot more cleanup/minor fixes.
This commit is contained in:
2026-09-08 18:07:39 +01:00
parent a5794d9ab3
commit bb3ce7549a
20 changed files with 410 additions and 84 deletions
+43
View File
@@ -0,0 +1,43 @@
#pragma once
#include "definitions.h"
#include "pch.h"
namespace bed::internal::scripting {
struct Block {
mrb_value proc;
mrb_state *mrb;
Block(mrb_state *mrb, mrb_value proc)
: proc(proc), mrb(mrb) {
mrb_gc_register(mrb, proc);
}
Block() : proc(mrb_nil_value()) {}
~Block() {
if (!mrb_nil_p(proc))
mrb_gc_unregister(mrb, proc);
}
void set_proc(mrb_value new_proc) {
if (!mrb_nil_p(proc))
mrb_gc_unregister(mrb, proc);
proc = new_proc;
mrb_gc_register(mrb, proc);
}
Block(const Block &) = delete;
Block &operator=(const Block &) = delete;
mrb_value call(int argc = 0, mrb_value *argv = nullptr) const {
if (mrb_nil_p(proc))
return mrb_nil_value();
mrb_value result = mrb_funcall_argv(mrb, proc, mrb_intern_cstr(mrb, "call"), argc, argv);
return result;
}
};
void register_basic(BEd &ctx);
void run(BEd &ctx, const std::string &str);
}; // namespace bed::internal::scripting