Changeset 147641 in webkit
- Timestamp:
- Apr 4, 2013 10:30:12 AM (11 years ago)
- Location:
- trunk/Source/WTF
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r147640 r147641 1 2013-04-04 Anders Carlsson <andersca@apple.com> 2 3 ObjcRuntimeExtras.h should use variadic templates 4 https://bugs.webkit.org/show_bug.cgi?id=113941 5 6 Reviewed by Andreas Kling. 7 8 Reimplement wtfObjcMsgSend and wtfCallIMP as variadic function templates. 9 10 * wtf/ObjcRuntimeExtras.h: 11 (wtfObjcMsgSend): 12 (wtfCallIMP): 13 1 14 2013-04-04 Andras Becsi <andras.becsi@digia.com> 2 15 -
trunk/Source/WTF/wtf/ObjcRuntimeExtras.h
r135882 r147641 28 28 #include <objc/message.h> 29 29 30 template<typename RetType >31 RetType wtfObjcMsgSend(id target, SEL selector )30 template<typename RetType, typename... ArgTypes> 31 RetType wtfObjcMsgSend(id target, SEL selector, ArgTypes... args) 32 32 { 33 return reinterpret_cast<RetType (*)(id, SEL )>(objc_msgSend)(target, selector);33 return reinterpret_cast<RetType (*)(id, SEL, ArgTypes...)>(objc_msgSend)(target, selector, args...); 34 34 } 35 35 36 template<typename RetType, typename Arg1Type>37 RetType wtf ObjcMsgSend(id target, SEL selector, Arg1Type arg1)36 template<typename RetType, typename... ArgTypes> 37 RetType wtfCallIMP(IMP implementation, id target, SEL selector, ArgTypes... args) 38 38 { 39 return reinterpret_cast<RetType (*)(id, SEL, Arg 1Type)>(objc_msgSend)(target, selector, arg1);39 return reinterpret_cast<RetType (*)(id, SEL, ArgTypes...)>(implementation)(target, selector, args...); 40 40 } 41 41 42 template<typename RetType, typename Arg1Type, typename Arg2Type> 43 RetType wtfObjcMsgSend(id target, SEL selector, Arg1Type arg1, Arg2Type arg2) 44 { 45 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type, Arg2Type)>(objc_msgSend)(target, selector, arg1, arg2); 46 } 47 48 template<typename RetType, typename Arg1Type, typename Arg2Type, typename Arg3Type> 49 RetType wtfObjcMsgSend(id target, SEL selector, Arg1Type arg1, Arg2Type arg2, Arg3Type arg3) 50 { 51 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type, Arg2Type, Arg3Type)>(objc_msgSend)(target, selector, arg1, arg2, arg3); 52 } 53 54 template<typename RetType, typename Arg1Type, typename Arg2Type, typename Arg3Type, typename Arg4Type> 55 RetType wtfObjcMsgSend(id target, SEL selector, Arg1Type arg1, Arg2Type arg2, Arg3Type arg3, Arg4Type arg4) 56 { 57 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type, Arg2Type, Arg3Type, Arg4Type)>(objc_msgSend)(target, selector, arg1, arg2, arg3, arg4); 58 } 59 60 template<typename RetType, typename Arg1Type, typename Arg2Type, typename Arg3Type, typename Arg4Type, typename Arg5Type> 61 RetType wtfObjcMsgSend(id target, SEL selector, Arg1Type arg1, Arg2Type arg2, Arg3Type arg3, Arg4Type arg4, Arg5Type arg5) 62 { 63 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type, Arg2Type, Arg3Type, Arg4Type, Arg5Type)>(objc_msgSend)(target, selector, arg1, arg2, arg3, arg4, arg5); 64 } 65 66 template<typename RetType> 67 RetType wtfCallIMP(IMP implementation, id target, SEL selector) 68 { 69 return reinterpret_cast<RetType (*)(id, SEL)>(implementation)(target, selector); 70 } 71 72 template<typename RetType, typename Arg1Type> 73 RetType wtfCallIMP(IMP implementation, id target, SEL selector, Arg1Type arg1) 74 { 75 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type)>(implementation)(target, selector, arg1); 76 } 77 78 template<typename RetType, typename Arg1Type, typename Arg2Type> 79 RetType wtfCallIMP(IMP implementation, id target, SEL selector, Arg1Type arg1, Arg2Type arg2) 80 { 81 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type, Arg2Type)>(implementation)(target, selector, arg1, arg2); 82 } 83 84 template<typename RetType, typename Arg1Type, typename Arg2Type, typename Arg3Type> 85 RetType wtfCallIMP(IMP implementation, id target, SEL selector, Arg1Type arg1, Arg2Type arg2, Arg3Type arg3) 86 { 87 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type, Arg2Type, Arg3Type)>(implementation)(target, selector, arg1, arg2, arg3); 88 } 89 90 template<typename RetType, typename Arg1Type, typename Arg2Type, typename Arg3Type, typename Arg4Type> 91 RetType wtfCallIMP(IMP implementation, id target, SEL selector, Arg1Type arg1, Arg2Type arg2, Arg3Type arg3, Arg4Type arg4) 92 { 93 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type, Arg2Type, Arg3Type, Arg4Type)>(implementation)(target, selector, arg1, arg2, arg3, arg4); 94 } 95 96 template<typename RetType, typename Arg1Type, typename Arg2Type, typename Arg3Type, typename Arg4Type, typename Arg5Type> 97 RetType wtfCallIMP(IMP implementation, id target, SEL selector, Arg1Type arg1, Arg2Type arg2, Arg3Type arg3, Arg4Type arg4, Arg5Type arg5) 98 { 99 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type, Arg2Type, Arg3Type, Arg4Type, Arg5Type)>(implementation)(target, selector, arg1, arg2, arg3, arg4, arg5); 100 } 101 102 template<typename RetType, typename Arg1Type, typename Arg2Type, typename Arg3Type, typename Arg4Type, typename Arg5Type, typename Arg6Type> 103 RetType wtfCallIMP(IMP implementation, id target, SEL selector, Arg1Type arg1, Arg2Type arg2, Arg3Type arg3, Arg4Type arg4, Arg5Type arg5, Arg6Type arg6) 104 { 105 return reinterpret_cast<RetType (*)(id, SEL, Arg1Type, Arg2Type, Arg3Type, Arg4Type, Arg5Type, Arg6Type)>(implementation)(target, selector, arg1, arg2, arg3, arg4, arg5, arg6); 106 } 107 108 #endif 42 #endif // WTF_ObjcRuntimeExtras_h
Note: See TracChangeset
for help on using the changeset viewer.