summaryrefslogtreecommitdiff
path: root/libobjcl.m
diff options
context:
space:
mode:
authorMatthias Benkard <code@mail.matthias.benkard.de>2007-08-03 18:08:07 +0200
committerMatthias Benkard <code@mail.matthias.benkard.de>2007-08-03 18:08:07 +0200
commitbc663521841d63b2cc847310aa58cffef561fed8 (patch)
tree03bd3ff977edf6034ede2998775e8e85bb7ce6e5 /libobjcl.m
parent2841f04d147c3f640e5a0b9787f5823a5f53e692 (diff)
Use type Class rather than id for classes.
darcs-hash:da715b2f31d65a2ad3fa34d68b2e2445496c8f46
Diffstat (limited to 'libobjcl.m')
-rw-r--r--libobjcl.m39
1 files changed, 33 insertions, 6 deletions
diff --git a/libobjcl.m b/libobjcl.m
index bd59810..24ab072 100644
--- a/libobjcl.m
+++ b/libobjcl.m
@@ -171,14 +171,19 @@ objcl_invoke_instance_method (OBJCL_OBJ_DATA receiver,
...)
{
va_list arglist;
- id self_;
+ id self_ = NULL;
SEL selector;
NSMethodSignature *signature;
void *result;
assert (receiver->type[0] == '#'
|| receiver->type[0] == '@');
- self_ = receiver->data.id_val;
+ switch (receiver->type[0])
+ {
+ case '#': self_ = receiver->data.class_val;
+ case '@': self_ = receiver->data.id_val;
+ }
+
selector = NSSelectorFromString ([NSString
stringWithUTF8String: method_name]);
@@ -199,14 +204,19 @@ objcl_invoke_class_method (OBJCL_OBJ_DATA class,
...)
{
va_list arglist;
- id self_;
+ id self_ = NULL;
SEL selector;
NSMethodSignature *signature;
void *result;
assert (class->type[0] == '#'
|| class->type[0] == '@');
- self_ = class->data.id_val;
+ switch (class->type[0])
+ {
+ case '#': self_ = class->data.class_val;
+ case '@': self_ = class->data.id_val;
+ }
+
selector = NSSelectorFromString ([NSString
stringWithUTF8String: method_name]);
@@ -223,14 +233,31 @@ objcl_invoke_class_method (OBJCL_OBJ_DATA class,
void *
objcl_find_class (const char *class_name)
{
- id class =
+ Class class =
NSClassFromString ([NSString stringWithUTF8String: class_name]);
OBJCL_OBJ_DATA result = malloc (sizeof (struct objcl_object));
const char *const typespec = "#8@0:4";
result->type = malloc (strlen (typespec) + 1);
strcpy (result->type, typespec);
- result->data.id_val = class;
+ result->data.class_val = class;
return result;
}
+
+
+const char *
+objcl_class_name (OBJCL_OBJ_DATA class)
+{
+ Class cls = NULL;
+
+ assert (class->type[0] == '#'
+ || class->type[0] == '@');
+ switch (class->type[0])
+ {
+ case '#': cls = class->data.class_val;
+ case '@': cls = class->data.id_val;
+ }
+
+ return class_get_class_name (cls);
+}