Overview
Comment: | Implement forwarding target for the Apple runtime.
Only on x86_64 so far, others to follow. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
2b20e164d7df0a9d63d7890c8ad6d7a3 |
User & Date: | js on 2012-11-16 21:16:06 |
Other Links: | manifest | tags |
Context
2012-11-16
| ||
21:26 | Bridge: Fix some type inconsistencies. check-in: 4b6dc80314 user: js tags: trunk | |
21:16 | Implement forwarding target for the Apple runtime. check-in: 2b20e164d7 user: js tags: trunk | |
2012-11-14
| ||
15:39 | Initial -[forwarindTargetForSelector:]. check-in: d3a2e59414 user: js tags: trunk | |
Changes
Modified configure.ac from [c122098dec] to [d44f0940e1].
︙ | |||
260 261 262 263 264 265 266 267 268 269 270 271 272 273 | 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | + + | [Whether we use the Apple ObjC runtime]) AC_CHECK_LIB(objc, objc_msgSend, [ LIBS="-lobjc $LIBS" ], [ AC_MSG_ERROR([libobjc not found!]) ]) AC_SUBST(APPLE_FORWARDING_S, "apple-forwarding.S") ;; esac AC_CHECK_FUNC(objc_constructInstance, [], [ AC_SUBST(INSTANCE_M, "instance.m") ]) |
︙ |
Modified extra.mk.in from [b4f940fa64] to [2ba1935cd7].
1 2 3 4 5 6 7 8 9 10 11 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | + - + | OBJFW_SHARED_LIB = @OBJFW_SHARED_LIB@ OBJFW_STATIC_LIB = @OBJFW_STATIC_LIB@ # When changing: Be sure to also change these in the Xcode project! OBJFW_LIB_MAJOR = 7 OBJFW_LIB_MINOR = 0 OBJFW_LIB_MAJOR_MINOR = ${OBJFW_LIB_MAJOR}.${OBJFW_LIB_MINOR} OBJFW_BRIDGE_SHARED_LIB = @OBJFW_BRIDGE_SHARED_LIB@ OBJFW_BRIDGE_STATIC_LIB = @OBJFW_BRIDGE_STATIC_LIB@ APPLE_FORWARDING_S = @APPLE_FORWARDING_S@ ASPRINTF_M = @ASPRINTF_M@ |
︙ |
Modified src/Makefile from [13bfd6fa59] to [aee11a3fa3].
︙ | |||
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | + + + + | OFMutableString_UTF8.m \ OFSet_hashtable.m \ ${OFSTREAMOBSERVER_KQUEUE_M} \ ${OFSTREAMOBSERVER_POLL_M} \ ${OFSTREAMOBSERVER_SELECT_M} \ OFString_UTF8.m \ OFTCPSocket+SOCKS5.m \ ${APPLE_FORWARDING_S} \ ${ASPRINTF_M} \ ${FOUNDATION_COMPAT_M} \ iso_8859_15.m \ windows_1252.m OBJS_EXTRA = ${EXCEPTIONS_EXCEPTIONS_A} ${RUNTIME_RUNTIME_A} LIB_OBJS_EXTRA = ${EXCEPTIONS_EXCEPTIONS_LIB_A} ${RUNTIME_RUNTIME_LIB_A} include ../buildsys.mk CPPFLAGS += -I. -I.. -Iexceptions -Iruntime AS = ${OBJC} ASFLAGS = ${CPPFLAGS} AS_DEPENDS = ${OBJC_DEPENDS} LD = ${OBJC} LDFLAGS += ${REEXPORT_LIBOBJC} ${MACH_ALIAS_LIST} ${BRIDGE}: ${SHARED_LIB} |
Modified src/OFObject.m from [4b4eff1419] to [43abec3b5d].
︙ | |||
62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | + + + + + | #import "instance.h" #if defined(OF_ATOMIC_OPS) # import "atomic.h" #elif defined(OF_THREADS) # import "threading.h" #endif #if defined(OF_APPLE_RUNTIME) && defined(__x86_64__) extern id of_forward(id, SEL, ...); extern struct stret of_forward_stret(id, SEL, ...); #endif struct pre_ivar { int32_t retainCount; struct pre_mem *firstMem, *lastMem; #if !defined(OF_ATOMIC_OPS) && defined(OF_THREADS) of_spinlock_t retainCountSpinlock; #endif |
︙ | |||
109 110 111 112 113 114 115 | 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | - - - + + + - - | enumeration_mutation_handler(id object) { @throw [OFEnumerationMutationException exceptionWithClass: [object class] object: object]; } |
︙ | |||
157 158 159 160 161 162 163 | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | + + - + - - - - + + + + + + | } return objc_msg_lookup(obj, sel); } } /* Try forwardingTargetForSelector: */ if (class_respondsToSelector(object_getClass(obj), @selector(forwardingTargetForSelector:))) { |
︙ | |||
244 245 246 247 248 249 250 | 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | - + + + + + | @implementation OFObject + (void)load { #if !defined(OF_APPLE_RUNTIME) || defined(__OBJC2__) objc_setUncaughtExceptionHandler(uncaught_exception_handler); #endif |
︙ |
Added src/apple-forwarding-x86_64.S version [f7c3563b91].