| /* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. |
| * Use of this file is governed by the BSD 3-clause license that |
| * can be found in the LICENSE.txt file in the project root. |
| */ |
| |
| #include "RuntimeMetaData.h" |
| |
| using namespace antlr4; |
| |
| const std::string RuntimeMetaData::VERSION = "4.9.3"; |
| |
| std::string RuntimeMetaData::getRuntimeVersion() { |
| return VERSION; |
| } |
| |
| void RuntimeMetaData::checkVersion(const std::string &generatingToolVersion, const std::string &compileTimeVersion) { |
| std::string runtimeVersion = VERSION; |
| bool runtimeConflictsWithGeneratingTool = false; |
| bool runtimeConflictsWithCompileTimeTool = false; |
| |
| if (generatingToolVersion != "") { |
| runtimeConflictsWithGeneratingTool = runtimeVersion != generatingToolVersion |
| && getMajorMinorVersion(runtimeVersion) != getMajorMinorVersion(generatingToolVersion); |
| } |
| |
| runtimeConflictsWithCompileTimeTool = runtimeVersion != compileTimeVersion |
| && getMajorMinorVersion(runtimeVersion) != getMajorMinorVersion(compileTimeVersion); |
| |
| if (runtimeConflictsWithGeneratingTool) { |
| std::cerr << "ANTLR Tool version " << generatingToolVersion << " used for code generation does not match " |
| "the current runtime version " << runtimeVersion << std::endl; |
| } |
| if (runtimeConflictsWithCompileTimeTool) { |
| std::cerr << "ANTLR Runtime version " << compileTimeVersion << " used for parser compilation does not match " |
| "the current runtime version " << runtimeVersion << std::endl; |
| } |
| } |
| |
| std::string RuntimeMetaData::getMajorMinorVersion(const std::string &version) { |
| size_t firstDot = version.find('.'); |
| size_t secondDot = firstDot != std::string::npos ? version.find('.', firstDot + 1) : std::string::npos; |
| size_t firstDash = version.find('-'); |
| size_t referenceLength = version.size(); |
| if (secondDot != std::string::npos) { |
| referenceLength = std::min(referenceLength, secondDot); |
| } |
| |
| if (firstDash != std::string::npos) { |
| referenceLength = std::min(referenceLength, firstDash); |
| } |
| |
| return version.substr(0, referenceLength); |
| } |