@@ -29,7 +29,7 @@ cpp! {{
2929 #include <QtQuick /QtQuick >
3030 #include <QtCore /QDebug >
3131 #include <QtQml /QQmlComponent >
32-
32+
3333 #ifdef NO_WIDGETS
3434 # define QAPPLICATION QGuiApplication
3535 # include <QtGui /QGuiApplication >
@@ -206,6 +206,8 @@ impl QmlEngine {
206206 let args_size = args. len ( ) ;
207207 let args_ptr = args. as_ptr ( ) ;
208208
209+ assert ! ( args_size <= 9 ) ;
210+
209211 cpp ! ( unsafe [
210212 self as "QmlEngineHolder *" ,
211213 name as "QByteArray" ,
@@ -219,23 +221,23 @@ impl QmlEngine {
219221 }
220222 QVariant ret;
221223 #if QT_VERSION >= QT_VERSION_CHECK ( 6 , 5 , 0 )
222- QMetaMethodArgument args [ 9 ] = { } ;
224+ #define INVOKE_METHOD ( ... ) QMetaObject :: invokeMethod ( robjs . first ( ) , name , qReturnArg ( ret ) , __VA_ARGS__ ) ;
223225 #else
224- QGenericArgument args [ 9 ] = { } ;
226+ #define INVOKE_METHOD ( ... ) QMetaObject :: invokeMethod ( robjs . first ( ) , name , Q_RETURN_ARG ( QVariant , ret ) , __VA_ARGS__ ) ;
225227 #endif
226- for ( uint i = 0 ; i < args_size; ++i) {
227- args[ i] = Q_ARG ( QVariant , args_ptr[ i] ) ;
228+ switch ( args_size) {
229+ case 0 : INVOKE_METHOD ( ) break ;
230+ case 1 : INVOKE_METHOD ( Q_ARG ( QVariant , args_ptr[ 0 ] ) ) ; break ;
231+ case 2 : INVOKE_METHOD ( Q_ARG ( QVariant , args_ptr[ 0 ] ) , Q_ARG ( QVariant , args_ptr[ 1 ] ) ) ; break ;
232+ case 3 : INVOKE_METHOD ( Q_ARG ( QVariant , args_ptr[ 0 ] ) , Q_ARG ( QVariant , args_ptr[ 1 ] ) , Q_ARG ( QVariant , args_ptr[ 2 ] ) ) ; break ;
233+ case 4 : INVOKE_METHOD ( Q_ARG ( QVariant , args_ptr[ 0 ] ) , Q_ARG ( QVariant , args_ptr[ 1 ] ) , Q_ARG ( QVariant , args_ptr[ 2 ] ) , Q_ARG ( QVariant , args_ptr[ 3 ] ) ) ; break ;
234+ case 5 : INVOKE_METHOD ( Q_ARG ( QVariant , args_ptr[ 0 ] ) , Q_ARG ( QVariant , args_ptr[ 1 ] ) , Q_ARG ( QVariant , args_ptr[ 2 ] ) , Q_ARG ( QVariant , args_ptr[ 3 ] ) , Q_ARG ( QVariant , args_ptr[ 4 ] ) ) ; break ;
235+ case 6 : INVOKE_METHOD ( Q_ARG ( QVariant , args_ptr[ 0 ] ) , Q_ARG ( QVariant , args_ptr[ 1 ] ) , Q_ARG ( QVariant , args_ptr[ 2 ] ) , Q_ARG ( QVariant , args_ptr[ 3 ] ) , Q_ARG ( QVariant , args_ptr[ 4 ] ) , Q_ARG ( QVariant , args_ptr[ 5 ] ) ) ; break ;
236+ case 7 : INVOKE_METHOD ( Q_ARG ( QVariant , args_ptr[ 0 ] ) , Q_ARG ( QVariant , args_ptr[ 1 ] ) , Q_ARG ( QVariant , args_ptr[ 2 ] ) , Q_ARG ( QVariant , args_ptr[ 3 ] ) , Q_ARG ( QVariant , args_ptr[ 4 ] ) , Q_ARG ( QVariant , args_ptr[ 5 ] ) , Q_ARG ( QVariant , args_ptr[ 6 ] ) ) ; break ;
237+ case 8 : INVOKE_METHOD ( Q_ARG ( QVariant , args_ptr[ 0 ] ) , Q_ARG ( QVariant , args_ptr[ 1 ] ) , Q_ARG ( QVariant , args_ptr[ 2 ] ) , Q_ARG ( QVariant , args_ptr[ 3 ] ) , Q_ARG ( QVariant , args_ptr[ 4 ] ) , Q_ARG ( QVariant , args_ptr[ 5 ] ) , Q_ARG ( QVariant , args_ptr[ 6 ] ) , Q_ARG ( QVariant , args_ptr[ 7 ] ) ) ; break ;
238+ case 9 : INVOKE_METHOD ( Q_ARG ( QVariant , args_ptr[ 0 ] ) , Q_ARG ( QVariant , args_ptr[ 1 ] ) , Q_ARG ( QVariant , args_ptr[ 2 ] ) , Q_ARG ( QVariant , args_ptr[ 3 ] ) , Q_ARG ( QVariant , args_ptr[ 4 ] ) , Q_ARG ( QVariant , args_ptr[ 5 ] ) , Q_ARG ( QVariant , args_ptr[ 6 ] ) , Q_ARG ( QVariant , args_ptr[ 7 ] ) , Q_ARG ( QVariant , args_ptr[ 8 ] ) ) ; break ;
228239 }
229- QMetaObject :: invokeMethod(
230- robjs. first( ) ,
231- name,
232- #if QT_VERSION >= QT_VERSION_CHECK ( 6 , 5 , 0 )
233- qReturnArg( ret) ,
234- #else
235- Q_RETURN_ARG ( QVariant , ret) ,
236- #endif
237- args[ 0 ] , args[ 1 ] , args[ 2 ] , args[ 3 ] , args[ 4 ] , args[ 5 ] , args[ 6 ] , args[ 7 ] , args[ 8 ]
238- ) ;
240+ #undef INVOKE_METHOD
239241 return ret;
240242 } )
241243 }
0 commit comments