Variant MethodStatement::invokeStatic(CStrRef cls, CArrRef params, const MethodStatementWrapper *msw, bool check /* = true */) const { ASSERT(msw->m_methodStatement == this); if (check) attemptAccess(FrameInjection::GetClassName(false), msw); DECLARE_THREAD_INFO_NOINIT MethScopeVariableEnvironment env(this); env.setCurrentClass(cls); env.setCurrentAlias(get_current_alias()); EvalFrameInjection fi(msw->m_className, m_fullName->data(), env, loc()->file, NULL, FrameInjection::StaticMethod); if (m_ref) { return strongBind(invokeImpl(env, params)); } return invokeImpl(env, params); }
Variant MethodStatement::invokeInstance(CObjRef obj, CArrRef params, const MethodStatementWrapper *msw, bool check /* = true */) const { ASSERT(msw->m_methodStatement == this); if (getModifiers() & ClassStatement::Static) { return invokeStatic(obj->o_getClassName(), params, msw, check); } if (check) attemptAccess(FrameInjection::GetClassName(false), msw); // The debug frame should have been pushed at ObjectMethodExpression DECLARE_THREAD_INFO_NOINIT MethScopeVariableEnvironment env(this); env.setCurrentObject(obj); env.setCurrentAlias(get_current_alias()); EvalFrameInjection fi(msw->m_className, m_fullName->data(), env, loc()->file, obj.get(), FrameInjection::ObjectMethod); if (m_ref) { return strongBind(invokeImpl(env, params)); } return invokeImpl(env, params); }
bool QxtBoundFunctionBase::invokeBase(Qt::ConnectionType type, QGenericReturnArgument returnValue, QXT_IMPL_10ARGS(QGenericArgument)) { QGenericArgument* args[10] = { &p1, &p2, &p3, &p4, &p5, &p6, &p7, &p8, &p9, &p10 }; for (int i = 0; i < 10; i++) { if (QByteArray(arg[i].name()) == "QxtBoundArgument") { p[i] = *args[(quintptr)(arg[i].data()) - 1]; } } return invokeImpl(type, returnValue, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9]); }
int QxtBoundFunctionBase::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QObject::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id == 0) { for (int i = 0; i < 10; i++) { if (QByteArray(arg[i].name()) == "QxtBoundArgument") { p[i] = QGenericArgument(bindTypes[i].constData(), _a[(quintptr)(arg[i].data())]); } } invokeImpl(Qt::DirectConnection, QGenericReturnArgument(), p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9]); } _id = -1; } return _id; }