Changeset 147641 in webkit


Ignore:
Timestamp:
Apr 4, 2013 10:30:12 AM (11 years ago)
Author:
andersca@apple.com
Message:

ObjcRuntimeExtras.h should use variadic templates
https://bugs.webkit.org/show_bug.cgi?id=113941

Reviewed by Andreas Kling.

Reimplement wtfObjcMsgSend and wtfCallIMP as variadic function templates.

  • wtf/ObjcRuntimeExtras.h:

(wtfObjcMsgSend):
(wtfCallIMP):

Location:
trunk/Source/WTF
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r147640 r147641  
     12013-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
    1142013-04-04  Andras Becsi  <andras.becsi@digia.com>
    215
  • trunk/Source/WTF/wtf/ObjcRuntimeExtras.h

    r135882 r147641  
    2828#include <objc/message.h>
    2929
    30 template<typename RetType>
    31 RetType wtfObjcMsgSend(id target, SEL selector)
     30template<typename RetType, typename... ArgTypes>
     31RetType wtfObjcMsgSend(id target, SEL selector, ArgTypes... args)
    3232{
    33     return reinterpret_cast<RetType (*)(id, SEL)>(objc_msgSend)(target, selector);
     33    return reinterpret_cast<RetType (*)(id, SEL, ArgTypes...)>(objc_msgSend)(target, selector, args...);
    3434}
    3535
    36 template<typename RetType, typename Arg1Type>
    37 RetType wtfObjcMsgSend(id target, SEL selector, Arg1Type arg1)
     36template<typename RetType, typename... ArgTypes>
     37RetType wtfCallIMP(IMP implementation, id target, SEL selector, ArgTypes... args)
    3838{
    39     return reinterpret_cast<RetType (*)(id, SEL, Arg1Type)>(objc_msgSend)(target, selector, arg1);
     39    return reinterpret_cast<RetType (*)(id, SEL, ArgTypes...)>(implementation)(target, selector, args...);
    4040}
    4141
    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.