Overview
Comment: | Work around a bug affecting only Clang 2.9 + libobjc from GCC 4.6. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
0c427ebb0a6a67531b94088c45265926 |
User & Date: | js on 2011-12-13 13:43:33 |
Other Links: | manifest | tags |
Context
2011-12-13
| ||
14:54 | Add some sanity checks to -[OFXMLElement initWithSerialization:]. check-in: 9b5a35bd98 user: js tags: trunk | |
13:43 | Work around a bug affecting only Clang 2.9 + libobjc from GCC 4.6. check-in: 0c427ebb0a user: js tags: trunk | |
2011-12-12
| ||
22:55 | objfw-compile: Allow -pthread. check-in: bcae0e5054 user: js tags: trunk | |
Changes
Modified src/OFObject.m from [34b558d1e8] to [f6fefc29fd].
︙ | ︙ | |||
120 121 122 123 124 125 126 127 128 129 130 131 132 133 | const char* _NSPrintForDebugger(id object) { return [[object description] cStringWithEncoding: OF_STRING_ENCODING_NATIVE]; } /* References for static linking */ void _references_to_categories_of_OFObject(void) { _OFObject_Serialization_reference = 1; } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | const char* _NSPrintForDebugger(id object) { return [[object description] cStringWithEncoding: OF_STRING_ENCODING_NATIVE]; } #ifdef OF_OLD_GNU_RUNTIME static BOOL protocol_conformsToProtocol(Protocol *a, Protocol *b) { /* * This function is an ugly workaround for a bug that only happens with * Clang 2.9 together with the libobjc from GCC 4.6. * Since the instance variables of Protocol are @private, we have to * cast them to a struct here in order to access them. */ struct objc_protocol { Class isa; const char *protocol_name; struct objc_protocol_list *protocol_list; } *pa = (struct objc_protocol*)a, *pb = (struct objc_protocol*)b; struct objc_protocol_list *pl; size_t i; if (!strcmp(pa->protocol_name, pb->protocol_name)) return YES; for (pl = pa->protocol_list; pl != NULL; pl = pl->next) for (i = 0; i < pl->count; i++) if (protocol_conformsToProtocol(pl->list[i], b)) return YES; return NO; } #endif /* References for static linking */ void _references_to_categories_of_OFObject(void) { _OFObject_Serialization_reference = 1; } |
︙ | ︙ | |||
270 271 272 273 274 275 276 | Class c; struct objc_protocol_list *pl; size_t i; for (c = self; c != Nil; c = class_get_super_class(c)) for (pl = c->protocols; pl != NULL; pl = pl->next) for (i = 0; i < pl->count; i++) | > | | 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 | Class c; struct objc_protocol_list *pl; size_t i; for (c = self; c != Nil; c = class_get_super_class(c)) for (pl = c->protocols; pl != NULL; pl = pl->next) for (i = 0; i < pl->count; i++) if (protocol_conformsToProtocol(pl->list[i], protocol)) return YES; return NO; #else Class c; for (c = self; c != Nil; c = class_getSuperclass(c)) |
︙ | ︙ |