QStringList QuickInterpreter::variablesOf( QSObject &obj, bool includeStatic, bool includeCustom, bool includeMemberVariables ) const { const QSClass *objType = obj.objectType(); QSMemberMap mmap = objType == env()->typeClass() && includeMemberVariables ? ( (QSTypeClass*) objType )->allMembers( &obj ) : objType->members( &obj ); QStringList lst; for ( QSMemberMap::Iterator it = mmap.begin(); it != mmap.end(); ++it ) { if ( ( (*it).type() == QSMember::Variable || includeCustom && (*it).type() == QSMember::Custom ) && (!(*it).isStatic() || includeStatic) && !(*it).isExecutable() ) lst << (*it).name(); } return lst; }
QStringList QuickInterpreter::functionsOf(QSObject &obj, bool includeSignature, bool includeNative, bool includeMemberFunctions) const { const QSClass *objType = obj.objectType(); QSMemberMap mmap = objType == env()->typeClass() && includeMemberFunctions ? ((QSTypeClass*) objType)->allMembers(&obj) : objType->members(&obj); QMap<int, QString> functions; for (QSMemberMap::Iterator it = mmap.begin(); it != mmap.end(); ++it) { if (((*it).type() == QSMember::ScriptFunction || includeNative && ((*it).type() == QSMember::NativeFunction || (*it).type() == QSMember::NativeMemberFunction)) && !(*it).isPrivate()) { QString func = (*it).name(); // ### will break with mix of script and C++ functions int idx = (*it).type() == QSMember::ScriptFunction ? (*it).scriptFunction->index() : functions.size(); if (includeSignature) { if ((*it).type() == QSMember::NativeFunction || (*it).type() == QSMember::NativeMemberFunction) { func += QString::fromLatin1("()"); } else { QSFunctionScopeClass *fsc = (*it).scriptFunction->scopeDefinition(); int args = fsc->numArguments(); func += QString::fromLatin1("("); if (args > 0) { func += QString::fromLatin1(" "); QSMemberMap *members = fsc->definedMembers(); QVector<QString> vec(args); for (QSMemberMap::ConstIterator ait = members->begin(); ait != members->end(); ++ait) { if ((*ait).index() < args) vec[ (*ait).index() ] = (*ait).name(); } for (int i = 0; i < args; ++i) { if (i > 0) func += QString::fromLatin1(", "); func += vec[i]; } func += QString::fromLatin1(" "); } func += QString::fromLatin1(")"); } } functions[idx] = func; } } // assemble to list sorted by original index QStringList lst; QMap<int, QString>::const_iterator cit = functions.begin(); for (; cit != functions.end(); ++cit) lst << *cit; return lst; }