vector CommandParser::Parse()

in src/vswhere.lib/CommandParser.cpp [34:69]


vector<CommandParser::Token> CommandParser::Parse(_In_ int argc, _In_ LPCWSTR argv[])
{
    vector<CommandParser::Token> tokens;

    // Parse program path from first argument.
    if (argc < 1)
    {
        // TODO: Provide localized error message.
        throw win32_error(ERROR_INVALID_PARAMETER, "missing program argument");
    }

    m_path = argv[0];

    // Parse remaining arguments.
    for (auto i = 1; i < argc; ++i)
    {
        auto arg = argv[i];

        if (!arg || !*arg)
        {
            // TODO: Provide localized error message.
            throw win32_error(ERROR_INVALID_PARAMETER, "empty argument");
        }

        if (L'-' == arg[0] || L'/' == arg[0])
        {
            tokens.push_back({ Token::eParameter, &arg[1] });
        }
        else
        {
            tokens.push_back({ Token::eArgument, arg });
        }
    }

    return tokens;
}