#include #include #include #include "mini-obj-c.h" #define WARN(f, ...) fprintf(stderr, f "\n", ##__VA_ARGS__) MethodImplementation method_lookup(struct Class* class, const char* sel) { for (; class; class = class->super) { for (size_t i = 0; i < class->methods_count; ++i) { auto entry = class->methods[i]; if (strcmp(entry.sel, sel) == 0) { return entry.impl; } } } return nullptr; } struct Object* msg_send(struct Object* self, const char* sel) { if (!self || !self->class) { WARN("Invalid object"); return nullptr; } auto impl = method_lookup(self->class, sel); if (impl) { return impl(self); } else { WARN("Method '%s' not found for class '%s'", sel, self->class->name); return nullptr; } }