Added .inspect and .to_s for debug help

This commit is contained in:
2026-05-20 19:23:33 +01:00
parent 7d48b226ab
commit 75b1bc5dbd
3 changed files with 64 additions and 3 deletions
+55 -2
View File
@@ -390,6 +390,24 @@ static mrb_value element_text_equal(mrb_state *mrb, mrb_value self) {
return mrb_bool_value(id_self == id_other); return mrb_bool_value(id_self == id_other);
} }
static mrb_value element_text_inspect(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_ElementText(mrb, self);
app::EText *element = (app::EText *)app::element_pool[id];
std::string str = "#<ElementText:0x"
+ std::format("0x{:016x}", id)
+ " key=:" + Localization::get_key_name(element->key)
+ " font_id=" + std::format("0x{:016x}", element->font_id)
+ ">";
return mrb_str_new_cstr(mrb, str.c_str());
}
static mrb_value element_text_to_s(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_ElementText(mrb, self);
app::EText *element = (app::EText *)app::element_pool[id];
std::string localized_text = Localization::get(Ruby::mrb, element->key, element->params);
return mrb_str_new_cstr(mrb, localized_text.c_str());
}
static mrb_value element_text_hash(mrb_state *mrb, mrb_value self) { static mrb_value element_text_hash(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_ElementText(mrb, self); uint64_t id = get_id_ElementText(mrb, self);
return mrb_fixnum_value(id); return mrb_fixnum_value(id);
@@ -620,10 +638,10 @@ static mrb_value ElementRect_init(mrb_state *mrb, mrb_value self) {
mrb_data_init(self, nullptr, &ElementRect_type); mrb_data_init(self, nullptr, &ElementRect_type);
Wrapper *s = new Wrapper(); Wrapper *s = new Wrapper();
mrb_int w, h; mrb_float w, h;
mrb_int color_i = 0xFFFFFF; mrb_int color_i = 0xFFFFFF;
mrb_value kwargs; mrb_value kwargs;
mrb_get_args(mrb, "iii|H", &w, &h, &color_i, &kwargs); mrb_get_args(mrb, "ffi|H", &w, &h, &color_i, &kwargs);
float x = 0, y = 0, z = 0, rotation = 0, scale_x = 1, scale_y = 1, alpha = 1; float x = 0, y = 0, z = 0, rotation = 0, scale_x = 1, scale_y = 1, alpha = 1;
bool click_through = false; bool click_through = false;
@@ -756,6 +774,17 @@ static mrb_value element_rect_equal(mrb_state *mrb, mrb_value self) {
return mrb_bool_value(id_self == id_other); return mrb_bool_value(id_self == id_other);
} }
static mrb_value element_rect_inspect(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_ElementRect(mrb, self);
app::ERect *element = (app::ERect *)app::element_pool[id];
std::string str = "#<ElementRect:0x"
+ std::format("0x{:016x}", id)
+ " width=" + std::format("{}", element->shape.x)
+ " height=" + std::format("{}", element->shape.y)
+ ">";
return mrb_str_new_cstr(mrb, str.c_str());
}
static mrb_value element_rect_hash(mrb_state *mrb, mrb_value self) { static mrb_value element_rect_hash(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_ElementRect(mrb, self); uint64_t id = get_id_ElementRect(mrb, self);
return mrb_fixnum_value(id); return mrb_fixnum_value(id);
@@ -975,6 +1004,17 @@ static mrb_value element_image_equal(mrb_state *mrb, mrb_value self) {
return mrb_bool_value(id_self == id_other); return mrb_bool_value(id_self == id_other);
} }
static mrb_value element_image_inspect(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_ElementImage(mrb, self);
app::EImage *element = (app::EImage *)app::element_pool[id];
std::string str = "#<ElementImage:0x"
+ std::format("0x{:016x}", id)
+ " animation_id=0x"
+ std::format("{:016x}", element->animation_id)
+ ">";
return mrb_str_new_cstr(mrb, str.c_str());
}
static mrb_value element_image_hash(mrb_state *mrb, mrb_value self) { static mrb_value element_image_hash(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_ElementImage(mrb, self); uint64_t id = get_id_ElementImage(mrb, self);
return mrb_fixnum_value(id); return mrb_fixnum_value(id);
@@ -1344,6 +1384,11 @@ static mrb_value scene_equal(mrb_state *mrb, mrb_value self) {
return mrb_bool_value(id_self == id_other); return mrb_bool_value(id_self == id_other);
} }
static mrb_value scene_inspect(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_Scene(mrb, self);
return mrb_str_new_cstr(mrb, ("#<Scene:" + std::to_string(id) + ">").c_str());
}
static mrb_value scene_hash(mrb_state *mrb, mrb_value self) { static mrb_value scene_hash(mrb_state *mrb, mrb_value self) {
uint64_t id = get_id_Scene(mrb, self); uint64_t id = get_id_Scene(mrb, self);
return mrb_fixnum_value(id); return mrb_fixnum_value(id);
@@ -1517,8 +1562,10 @@ inline void setup() {
DEF_CLASS(ElementText, MRB_ARGS_REQ(3) | MRB_ARGS_OPT(2)); DEF_CLASS(ElementText, MRB_ARGS_REQ(3) | MRB_ARGS_OPT(2));
ADD_METHOD(ElementText, "==", element_text_equal, MRB_ARGS_REQ(1)); ADD_METHOD(ElementText, "==", element_text_equal, MRB_ARGS_REQ(1));
ADD_METHOD(ElementText, "eql?", element_text_equal, MRB_ARGS_REQ(1)); ADD_METHOD(ElementText, "eql?", element_text_equal, MRB_ARGS_REQ(1));
ADD_METHOD(ElementText, "inspect", element_text_inspect, MRB_ARGS_NONE());
ADD_METHOD(ElementText, "hash", element_text_hash, MRB_ARGS_NONE()); ADD_METHOD(ElementText, "hash", element_text_hash, MRB_ARGS_NONE());
ADD_METHOD(ElementText, "on_click", element_text_on_click, MRB_ARGS_BLOCK()); ADD_METHOD(ElementText, "on_click", element_text_on_click, MRB_ARGS_BLOCK());
ADD_METHOD(ElementText, "to_s", element_text_to_s, MRB_ARGS_NONE());
ADD_METHOD(ElementText, "key=", element_text_key_set, MRB_ARGS_REQ(1)); ADD_METHOD(ElementText, "key=", element_text_key_set, MRB_ARGS_REQ(1));
ADD_METHOD(ElementText, "key", element_text_key_get, MRB_ARGS_NONE()); ADD_METHOD(ElementText, "key", element_text_key_get, MRB_ARGS_NONE());
ADD_METHOD(ElementText, "color=", element_text_color_set, MRB_ARGS_REQ(1)); ADD_METHOD(ElementText, "color=", element_text_color_set, MRB_ARGS_REQ(1));
@@ -1545,6 +1592,8 @@ inline void setup() {
DEF_CLASS(ElementRect, MRB_ARGS_REQ(3) | MRB_ARGS_OPT(1)); DEF_CLASS(ElementRect, MRB_ARGS_REQ(3) | MRB_ARGS_OPT(1));
ADD_METHOD(ElementRect, "==", element_rect_equal, MRB_ARGS_REQ(1)); ADD_METHOD(ElementRect, "==", element_rect_equal, MRB_ARGS_REQ(1));
ADD_METHOD(ElementRect, "eql?", element_rect_equal, MRB_ARGS_REQ(1)); ADD_METHOD(ElementRect, "eql?", element_rect_equal, MRB_ARGS_REQ(1));
ADD_METHOD(ElementRect, "inspect", element_rect_inspect, MRB_ARGS_NONE());
ADD_METHOD(ElementRect, "to_s", element_rect_inspect, MRB_ARGS_NONE());
ADD_METHOD(ElementRect, "hash", element_rect_hash, MRB_ARGS_NONE()); ADD_METHOD(ElementRect, "hash", element_rect_hash, MRB_ARGS_NONE());
ADD_METHOD(ElementRect, "on_click", element_rect_on_click, MRB_ARGS_BLOCK()); ADD_METHOD(ElementRect, "on_click", element_rect_on_click, MRB_ARGS_BLOCK());
ADD_METHOD(ElementRect, "width=", element_rect_width_set, MRB_ARGS_REQ(1)); ADD_METHOD(ElementRect, "width=", element_rect_width_set, MRB_ARGS_REQ(1));
@@ -1570,6 +1619,8 @@ inline void setup() {
ADD_METHOD(ElementImage, "on_click", element_image_on_click, MRB_ARGS_BLOCK()); ADD_METHOD(ElementImage, "on_click", element_image_on_click, MRB_ARGS_BLOCK());
ADD_METHOD(ElementImage, "==", element_image_equal, MRB_ARGS_REQ(1)); ADD_METHOD(ElementImage, "==", element_image_equal, MRB_ARGS_REQ(1));
ADD_METHOD(ElementImage, "eql?", element_image_equal, MRB_ARGS_REQ(1)); ADD_METHOD(ElementImage, "eql?", element_image_equal, MRB_ARGS_REQ(1));
ADD_METHOD(ElementImage, "inspect", element_image_inspect, MRB_ARGS_NONE());
ADD_METHOD(ElementImage, "to_s", element_image_inspect, MRB_ARGS_NONE());
ADD_METHOD(ElementImage, "hash", element_image_hash, MRB_ARGS_NONE()); ADD_METHOD(ElementImage, "hash", element_image_hash, MRB_ARGS_NONE());
ADD_METHOD(ElementImage, "animation=", element_image_animation_set, MRB_ARGS_REQ(1)); ADD_METHOD(ElementImage, "animation=", element_image_animation_set, MRB_ARGS_REQ(1));
ADD_METHOD(ElementImage, "animation", element_image_animation_get, MRB_ARGS_NONE()); ADD_METHOD(ElementImage, "animation", element_image_animation_get, MRB_ARGS_NONE());
@@ -1589,6 +1640,8 @@ inline void setup() {
DEF_CLASS(Scene, MRB_ARGS_NONE()); DEF_CLASS(Scene, MRB_ARGS_NONE());
ADD_METHOD(Scene, "==", scene_equal, MRB_ARGS_REQ(1)); ADD_METHOD(Scene, "==", scene_equal, MRB_ARGS_REQ(1));
ADD_METHOD(Scene, "eql?", scene_equal, MRB_ARGS_REQ(1)); ADD_METHOD(Scene, "eql?", scene_equal, MRB_ARGS_REQ(1));
ADD_METHOD(Scene, "inspect", scene_inspect, MRB_ARGS_NONE());
ADD_METHOD(Scene, "to_s", scene_inspect, MRB_ARGS_NONE());
ADD_METHOD(Scene, "hash", scene_hash, MRB_ARGS_NONE()); ADD_METHOD(Scene, "hash", scene_hash, MRB_ARGS_NONE());
ADD_METHOD(Scene, "<<", scene_add_element, MRB_ARGS_REQ(1)); ADD_METHOD(Scene, "<<", scene_add_element, MRB_ARGS_REQ(1));
ADD_METHOD(Scene, "delete", scene_delete_element, MRB_ARGS_REQ(1)); ADD_METHOD(Scene, "delete", scene_delete_element, MRB_ARGS_REQ(1));
+8
View File
@@ -134,4 +134,12 @@ inline Key key_from_sym(mrb_state *mrb, mrb_sym sym) {
localization_key_map[key_name] = new_id; localization_key_map[key_name] = new_id;
return new_id; return new_id;
} }
// This is only used for debugging and inspect output, so performance is not a concern
inline std::string get_key_name(Key key) {
for (const auto &[str, k] : localization_key_map)
if (k == key)
return str;
return "Unknown Key";
}
} // namespace Localization } // namespace Localization
+1 -1
View File
@@ -160,7 +160,7 @@ template <typename T = void *>
struct Pool { struct Pool {
T *operator[](uint64_t index) { T *operator[](uint64_t index) {
if (!is_valid(index)) { if (!is_valid(index)) {
fprintf(stderr, "Invalid pool index: %llu\n", (unsigned long long)index); fprintf(stderr, "Invalid pool index: %lu\n", (uint64_t)index);
return nullptr; return nullptr;
} }
uint32_t id = (uint32_t)(index & 0xFFFFFFFFULL); uint32_t id = (uint32_t)(index & 0xFFFFFFFFULL);