コード例 #1
0
ファイル: Trivial.cpp プロジェクト: carriercomm/corvus
void Trivial::visit_pre_signature(signature* n) {

    // verify that if we see a parameter with a default, that
    // we don't find a parameter after it with no default
    // function($foo, $bar='test', $baz)
    int p = n->numParams();
    if (!p)
        return;
    formalParam* param(0);
    formalParam* firstParam(0);
    // note, the params are in reverse order
    for (int i = p-1; i >= 0; i--) {
        param = n->getParam(i);
        if (param->hasDefault()) {
            if (!firstParam)
                firstParam = param;
        }
        else if (firstParam) {
            addDiagnostic(param, "parameter should have default because previous parameter does");
            addDiagnostic(firstParam, "first parameter with default defined here");
            // return so that we only show the diag once
            return;
        }
    }

}
コード例 #2
0
ファイル: main.cpp プロジェクト: nagyist/qTox
int main(int argc, char *argv[])
{
    qInstallMessageHandler(logMessageHandler); // Enable log as early as possible
    QApplication a(argc, argv);
    a.setApplicationName("qTox");
    a.setOrganizationName("Tox");
    a.setApplicationVersion("\nGit commit: " + QString(GIT_VERSION));

#ifdef HIGH_DPI
    a.setAttribute(Qt::AA_UseHighDpiPixmaps, true);
#endif

    qsrand(time(0));
    Settings::getInstance();
    Translator::translate();

    // Process arguments
    QCommandLineParser parser;
    parser.setApplicationDescription("qTox, version: " + QString(GIT_VERSION) + "\nBuilt: " + __TIME__ + " " + __DATE__);
    parser.addHelpOption();
    parser.addVersionOption();
    parser.addPositionalArgument("uri", QObject::tr("Tox URI to parse"));
    parser.addOption(QCommandLineOption("p", QObject::tr("Starts new instance and loads specified profile."), QObject::tr("profile")));
    parser.process(a);

#ifndef Q_OS_ANDROID
    IPC& ipc = IPC::getInstance();
#endif

    sodium_init(); // For the auto-updater

#ifdef LOG_TO_FILE
    logFileStream.reset(new QTextStream);
    logFileFile.reset(new QFile(Settings::getInstance().getSettingsDirPath()+"qtox.log"));
    if (logFileFile->open(QIODevice::Append))
    {
        logFileStream->setDevice(logFileFile.get());
        *logFileStream << QDateTime::currentDateTime().toString("\nyyyy-MM-dd HH:mm:ss' file logger starting\n'");
    }
    else
    {
        qWarning() << "Couldn't open log file!\n";
        logFileStream.release();
    }
#endif

    // Windows platform plugins DLL hell fix
    QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath());
    a.addLibraryPath("platforms");

    qDebug() << "built on: " << __TIME__ << __DATE__ << "(" << TIMESTAMP << ")";
    qDebug() << "commit: " << GIT_VERSION << "\n";

#if defined(Q_OS_MACX) && defined(QT_RELEASE)
    osx::moveToAppFolder();
#endif

    // Install Unicode 6.1 supporting font
    QFontDatabase::addApplicationFont("://DejaVuSans.ttf");

    // Check whether we have an update waiting to be installed
#if AUTOUPDATE_ENABLED
    if (AutoUpdater::isLocalUpdateReady())
        AutoUpdater::installLocalUpdate(); ///< NORETURN
#endif


#ifndef Q_OS_ANDROID
    // Inter-process communication
    ipc.registerEventHandler("uri", &toxURIEventHandler);
    ipc.registerEventHandler("save", &toxSaveEventHandler);
    ipc.registerEventHandler("activate", &toxActivateEventHandler);

    if (parser.isSet("p"))
    {
        QString profileName = parser.value("p");
        if (Profile::exists(profileName))
        {
            qDebug() << "Setting profile to" << profileName;
            if (Profile::isEncrypted(profileName))
            {
                Settings::getInstance().setCurrentProfile(profileName);
            }
            else
            {
                Profile* profile = Profile::loadProfile(profileName);
                if (!profile)
                {
                    qCritical() << "-p profile" << profileName + ".tox" << " couldn't be loaded";
                    return EXIT_FAILURE;
                }
                Nexus::getInstance().setProfile(profile);
            }
        }
        else
        {
            qCritical() << "-p profile" << profileName + ".tox" << "doesn't exist";
            return EXIT_FAILURE;
        }
    }

    if (parser.positionalArguments().size() > 0)
    {
        QString firstParam(parser.positionalArguments()[0]);
        // Tox URIs. If there's already another qTox instance running, we ask it to handle the URI and we exit
        // Otherwise we start a new qTox instance and process it ourselves
        if (firstParam.startsWith("tox:"))
        {
            if (ipc.isCurrentOwner()) // Don't bother sending an event if we're going to process it ourselves
            {
                handleToxURI(firstParam.toUtf8());
            }
            else
            {
                time_t event = ipc.postEvent("uri", firstParam.toUtf8());
                ipc.waitUntilAccepted(event);
                // If someone else processed it, we're done here, no need to actually start qTox
                if (!ipc.isCurrentOwner())
                    return EXIT_SUCCESS;
            }
        }
        else if (firstParam.endsWith(".tox"))
        {
            if (ipc.isCurrentOwner()) // Don't bother sending an event if we're going to process it ourselves
            {
                handleToxSave(firstParam.toUtf8());
            }
            else
            {
                time_t event = ipc.postEvent("save", firstParam.toUtf8());
                ipc.waitUntilAccepted(event);
                // If someone else processed it, we're done here, no need to actually start qTox
                if (!ipc.isCurrentOwner())
                    return EXIT_SUCCESS;
            }
        }
        else
        {
            fprintf(stderr, "Invalid argument\n");
            return EXIT_FAILURE;
        }
    }
    else if (!ipc.isCurrentOwner() && !parser.isSet("p"))
    {
        time_t event = ipc.postEvent("activate");
        if (!ipc.waitUntilAccepted(event, 2))
        {
            return EXIT_SUCCESS;
        }
    }
#endif

    // Autologin
    if (Settings::getInstance().getAutoLogin())
    {
        QString profileName = Settings::getInstance().getCurrentProfile();
        if (Profile::exists(profileName) && !Profile::isEncrypted(profileName))
        {
            Profile* profile = Profile::loadProfile(profileName);
            if (profile)
                Nexus::getInstance().setProfile(profile);
        }
    }

    Nexus::getInstance().start();

    // Run
    int errorcode = a.exec();

#ifdef LOG_TO_FILE
    logFileStream.release();
#endif

    Nexus::destroyInstance();
    CameraSource::destroyInstance();
    Settings::destroyInstance();
    qDebug() << "Clean exit with status"<<errorcode;
    return errorcode;
}
コード例 #3
0
ファイル: ecAsyn.cpp プロジェクト: ronaldomercado/ethercat
bool ecSdoAsyn::isTrig(int param)
{
    return rangeOkay(param) &&
        ((param - firstParam()) % 3 == 2);
}
コード例 #4
0
ファイル: ecAsyn.cpp プロジェクト: ronaldomercado/ethercat
bool ecSdoAsyn::isStat(int param)
{
    return rangeOkay(param) &&
        ((param - firstParam()) % 3 == 1);
}
コード例 #5
0
ファイル: ecAsyn.cpp プロジェクト: ronaldomercado/ethercat
bool ecSdoAsyn::isVal(int param)
{
    return rangeOkay(param) &&
        ((param - firstParam()) % 3 == 0);
}
コード例 #6
0
ファイル: ecAsyn.cpp プロジェクト: ronaldomercado/ethercat
bool ecSdoAsyn::rangeOkay(int param)
{
    return (param >= firstParam() && param <= lastParam());
}