From d801ba9e2ef9c0f36a2ab07241c6777eb622c96b Mon Sep 17 00:00:00 2001 From: Matthias Benkard Date: Mon, 4 Feb 2008 21:10:04 +0100 Subject: Objective-C layer: Add some debugging aids. darcs-hash:7c72034ac9fb253f3846a919ad4fde27e17a6d01 --- Objective-C/libobjcl.m | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'Objective-C') diff --git a/Objective-C/libobjcl.m b/Objective-C/libobjcl.m index 7c1c186..1d6607e 100644 --- a/Objective-C/libobjcl.m +++ b/Objective-C/libobjcl.m @@ -28,6 +28,18 @@ #include #endif +#if 0 +#define TRACE NSLog +#else +#define TRACE objcl_null_log +#endif + +static void +objcl_null_log (NSString *s, ...) +{ +} + + static NSAutoreleasePool *objcl_autorelease_pool = NULL; /* Preallocate an exception to throw when memory is all used up. */ @@ -97,19 +109,24 @@ objcl_invoke_with_types (int argc, NS_DURING { + TRACE (@"get-method"); method = objcl_get_method_implementation (receiver, method_selector); + TRACE (@"method == NULL"); if (method == NULL) [[NSException exceptionWithName: @"MLKNoApplicableMethod" reason: @"Tried to call a non-existent method." userInfo: nil] raise]; + TRACE (@"return type"); return_type = objcl_pyobjc_signature_to_ffi_return_type (return_typespec); arg_types[0] = id_type; arg_types[1] = sel_type; + TRACE (@"args"); for (i = 0; i < argc; i++) arg_types[i + 2] = objcl_pyobjc_arg_signature_to_ffi_type (arg_typespecs[i]); + TRACE (@"prep"); status = ffi_prep_cif (&cif, FFI_DEFAULT_ABI, argc + 2, return_type, arg_types); if (status != FFI_OK) { @@ -118,7 +135,9 @@ objcl_invoke_with_types (int argc, userInfo: nil] raise]; } + TRACE (@"call"); ffi_call (&cif, FFI_FN (method), return_value, argv); + TRACE (@"..."); } NS_HANDLER { @@ -134,6 +153,7 @@ objcl_invoke_with_types (int argc, Class objcl_find_class (const char *class_name) { + TRACE (@"find-class %s", class_name); #ifdef __NEXT_RUNTIME__ return objc_getClass (class_name); #else @@ -145,6 +165,7 @@ objcl_find_class (const char *class_name) Class objcl_find_meta_class (const char *class_name) { + TRACE (@"find-meta-class %s", class_name); #ifdef __NEXT_RUNTIME__ return objc_getMetaClass (class_name); #else @@ -190,6 +211,7 @@ objcl_class_name (Class class) const char *ns_name; char *name; + TRACE (@"class-name"); ns_name = [(NSStringFromClass (class)) UTF8String]; name = malloc (strlen (ns_name) + 1); strcpy (name, ns_name); @@ -201,6 +223,13 @@ objcl_class_name (Class class) Class objcl_class_superclass (Class class) { + TRACE (@"super-class"); + + /* Not strictly needed on the GNU runtime, but not going to hurt + anyone either. */ + if (class == [NSObject class]) + return nil; + #ifdef __NEXT_RUNTIME__ return class_getSuperclass (class); #else @@ -227,6 +256,7 @@ IMP objcl_get_method_implementation (id object, SEL selector) { + TRACE (@"method-impl %p %p", object, selector); #ifdef __NEXT_RUNTIME__ if (objcl_object_is_class (object)) return method_getImplementation (class_getClassMethod (object, selector)); @@ -247,6 +277,7 @@ objcl_get_method_implementation (id object, BOOL objcl_object_is_class (id obj) { + TRACE (@"is-class %p", obj); #ifdef __NEXT_RUNTIME__ return [obj class] == obj; #else @@ -259,6 +290,7 @@ objcl_object_is_class (id obj) BOOL objcl_object_is_meta_class (id obj) { + TRACE (@"is-meta-class %p", obj); #ifdef __NEXT_RUNTIME__ return objcl_object_is_class (obj) && class_isMetaClass (obj); #else @@ -274,6 +306,7 @@ objcl_object_is_meta_class (id obj) Class objcl_object_get_class (id obj) { + TRACE (@"get-class %p", obj); #ifdef __NEXT_RUNTIME__ return object_getClass (obj); #else @@ -285,6 +318,7 @@ objcl_object_get_class (id obj) Class objcl_object_get_meta_class (id obj) { + TRACE (@"get-meta-class %p", obj); #ifdef __NEXT_RUNTIME__ /* FIXME: What to do here? */ return objc_getMetaClass ([(NSStringFromClass ([obj class])) UTF8String]); @@ -397,6 +431,7 @@ objcl_class_direct_slots (Class class, unsigned int *count, unsigned int *elemen IVAR_T *ivars; #ifdef __NEXT_RUNTIME__ + TRACE (@"slots"); #else int i; #endif @@ -424,6 +459,7 @@ objcl_class_direct_slots (Class class, unsigned int *count, unsigned int *elemen const char * objcl_slot_name (IVAR_T ivar) { + TRACE (@"slot-name"); #ifdef __NEXT_RUNTIME__ return ivar_getName (ivar); #else -- cgit v1.2.3