From 73ef7c1bcb97db447f8ebbeb93bdafe8d02375ed Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Thu, 15 Sep 2016 00:07:47 +0200 Subject: [PATCH] logic: Fixed C language setting not propagated to Parser and added all supported language standards for C/C++ --- src/lib/CxxProject.cpp | 2 +- src/lib/settings/CxxProjectSettings.cpp | 56 +++++++++++++++----- src/lib_parser/data/parser/cxx/CxxParser.cpp | 23 +------- src/lib_parser/data/parser/cxx/CxxParser.h | 2 - src/test/CxxParserTestSuite.h | 4 +- 5 files changed, 47 insertions(+), 40 deletions(-) diff --git a/src/lib/CxxProject.cpp b/src/lib/CxxProject.cpp index e3f65d88..3437b2fb 100644 --- a/src/lib/CxxProject.cpp +++ b/src/lib/CxxProject.cpp @@ -122,7 +122,7 @@ Parser::Arguments CxxProject::getParserArguments() const utility::append(args.frameworkSearchPaths, m_projectSettings->getAbsoluteFrameworkSearchPaths()); utility::append(args.frameworkSearchPaths, appSettings->getFrameworkSearchPathsExpanded()); - args.language = m_projectSettings->getLanguage(); + args.language = languageTypeToString(m_projectSettings->getLanguage()); args.languageStandard = m_projectSettings->getStandard(); args.compilationDatabasePath = m_projectSettings->getCompilationDatabasePath(); diff --git a/src/lib/settings/CxxProjectSettings.cpp b/src/lib/settings/CxxProjectSettings.cpp index bb50c14b..272e91c0 100644 --- a/src/lib/settings/CxxProjectSettings.cpp +++ b/src/lib/settings/CxxProjectSettings.cpp @@ -43,22 +43,52 @@ std::vector CxxProjectSettings::getLanguageStandards() const switch (getLanguage()) { case LANGUAGE_CPP: - standards.push_back("1z"); - standards.push_back("14"); - standards.push_back("1y"); - standards.push_back("11"); - standards.push_back("0x"); - standards.push_back("03"); - standards.push_back("98"); + standards.push_back("c++1z"); + standards.push_back("gnu++1z"); + + standards.push_back("c++14"); + standards.push_back("gnu++14"); + + standards.push_back("c++1y"); + standards.push_back("gnu++1y"); + + standards.push_back("c++11"); + standards.push_back("gnu++11"); + + standards.push_back("c++0x"); + standards.push_back("gnu++0x"); + + standards.push_back("c++03"); + + standards.push_back("c++98"); + standards.push_back("gnu++98"); break; case LANGUAGE_C: - standards.push_back("1x"); - standards.push_back("11"); - standards.push_back("9x"); - standards.push_back("99"); - standards.push_back("90"); - standards.push_back("89"); + standards.push_back("c1x"); + standards.push_back("gnu1x"); + standards.push_back("iso9899:201x"); + + standards.push_back("c11"); + standards.push_back("gnu11"); + standards.push_back("iso9899:2011"); + + standards.push_back("c9x"); + standards.push_back("gnu9x"); + standards.push_back("iso9899:199x"); + + standards.push_back("c99"); + standards.push_back("gnu99"); + standards.push_back("iso9899:1999"); + + standards.push_back("iso9899:199409"); + + standards.push_back("c90"); + standards.push_back("gnu90"); + standards.push_back("iso9899:1990"); + + standards.push_back("c89"); + standards.push_back("gnu89"); break; default: diff --git a/src/lib_parser/data/parser/cxx/CxxParser.cpp b/src/lib_parser/data/parser/cxx/CxxParser.cpp index 1faa0647..f23bcfe2 100644 --- a/src/lib_parser/data/parser/cxx/CxxParser.cpp +++ b/src/lib_parser/data/parser/cxx/CxxParser.cpp @@ -135,15 +135,8 @@ std::vector CxxParser::getCommandlineArguments(const Arguments& arg { std::vector args = getCommandlineArgumentsEssential(arguments); - // The option '-x c++' treats subsequent input files as C++. - args.push_back("-x"); - std::string language = getLanguageArgument(arguments.language); - args.push_back(language); - // Set language standard - std::string standard = "-std="; - standard += language; - standard += arguments.languageStandard; + std::string standard = "-std=" + arguments.languageStandard; args.push_back(standard); return args; @@ -232,17 +225,3 @@ ParserClient* CxxParser::getParserClient() { return m_client; } - -std::string CxxParser::getLanguageArgument(const std::string& language) const -{ - std::string result = language; - - boost::algorithm::to_lower(result); - - if (result != "c++" && result != "c") - { - result = "c++"; - } - - return result; -} diff --git a/src/lib_parser/data/parser/cxx/CxxParser.h b/src/lib_parser/data/parser/cxx/CxxParser.h index 721cfa33..70f6a38f 100644 --- a/src/lib_parser/data/parser/cxx/CxxParser.h +++ b/src/lib_parser/data/parser/cxx/CxxParser.h @@ -36,8 +36,6 @@ private: FileRegister* getFileRegister(); ParserClient* getParserClient(); - std::string getLanguageArgument(const std::string& language) const; - friend class TaskParseCxx; std::shared_ptr m_fileRegister; diff --git a/src/test/CxxParserTestSuite.h b/src/test/CxxParserTestSuite.h index 2a4e972b..4b6a9488 100644 --- a/src/test/CxxParserTestSuite.h +++ b/src/test/CxxParserTestSuite.h @@ -2885,7 +2885,7 @@ public: Parser::Arguments args; args.language = "c++"; - args.languageStandard = "1z"; + args.languageStandard = "c++1z"; parser.parseFiles(filePaths, args); @@ -3222,7 +3222,7 @@ private: m_args.logErrors = logErrors; m_args.language = "c++"; - m_args.languageStandard = "1z"; + m_args.languageStandard = "c++1z"; TestFileManager fm; std::shared_ptr fr = std::make_shared(&fm, false);