[llvm] r238796 - [ADT] Add Triple::getEnvironmentVersion
David Majnemer
david.majnemer at gmail.com
Mon Jun 1 16:38:10 PDT 2015
Author: majnemer
Date: Mon Jun 1 18:38:09 2015
New Revision: 238796
URL: http://llvm.org/viewvc/llvm-project?rev=238796&view=rev
Log:
[ADT] Add Triple::getEnvironmentVersion
This allows us to extract version numbers from the environment.
getOSVersion is currently overloaded for that purpose, this allows us to
clean it up.
Modified:
llvm/trunk/include/llvm/ADT/Triple.h
llvm/trunk/lib/Support/Triple.cpp
Modified: llvm/trunk/include/llvm/ADT/Triple.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Triple.h?rev=238796&r1=238795&r2=238796&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/Triple.h (original)
+++ llvm/trunk/include/llvm/ADT/Triple.h Mon Jun 1 18:38:09 2015
@@ -255,6 +255,15 @@ public:
/// getEnvironment - Get the parsed environment type of this triple.
EnvironmentType getEnvironment() const { return Environment; }
+ /// \brief Parse the version number from the OS name component of the
+ /// triple, if present.
+ ///
+ /// For example, "fooos1.2.3" would return (1, 2, 3).
+ ///
+ /// If an entry is not defined, it will be returned as 0.
+ void getEnvironmentVersion(unsigned &Major, unsigned &Minor,
+ unsigned &Micro) const;
+
/// getFormat - Get the object format for this triple.
ObjectFormatType getObjectFormat() const { return ObjectFormat; }
Modified: llvm/trunk/lib/Support/Triple.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Triple.cpp?rev=238796&r1=238795&r2=238796&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Triple.cpp (original)
+++ llvm/trunk/lib/Support/Triple.cpp Mon Jun 1 18:38:09 2015
@@ -702,6 +702,16 @@ std::string Triple::normalize(StringRef
// Special case logic goes here. At this point Arch, Vendor and OS have the
// correct values for the computed components.
+ std::string NormalizedEnvironment;
+ if (Environment == Triple::Android && Components[3].startswith("androideabi")) {
+ StringRef AndroidVersion = Components[3].drop_front(strlen("androideabi"));
+ if (AndroidVersion.empty()) {
+ Components[3] = "android";
+ } else {
+ NormalizedEnvironment = Twine("android", AndroidVersion).str();
+ Components[3] = NormalizedEnvironment;
+ }
+ }
if (OS == Triple::Win32) {
Components.resize(4);
@@ -779,6 +789,35 @@ static unsigned EatNumber(StringRef &Str
return Result;
}
+static void parseVersionFromName(StringRef Name, unsigned &Major,
+ unsigned &Minor, unsigned &Micro) {
+ // Any unset version defaults to 0.
+ Major = Minor = Micro = 0;
+
+ // Parse up to three components.
+ unsigned *Components[3] = {&Major, &Minor, &Micro};
+ for (unsigned i = 0; i != 3; ++i) {
+ if (Name.empty() || Name[0] < '0' || Name[0] > '9')
+ break;
+
+ // Consume the leading number.
+ *Components[i] = EatNumber(Name);
+
+ // Consume the separator, if present.
+ if (Name.startswith("."))
+ Name = Name.substr(1);
+ }
+}
+
+void Triple::getEnvironmentVersion(unsigned &Major, unsigned &Minor,
+ unsigned &Micro) const {
+ StringRef EnvironmentName = getEnvironmentName();
+ StringRef EnvironmentTypeName = getEnvironmentTypeName(getEnvironment());
+ if (EnvironmentName.startswith(EnvironmentTypeName))
+ EnvironmentName = EnvironmentName.substr(EnvironmentTypeName.size());
+ parseVersionFromName(EnvironmentName, Major, Minor, Micro);
+}
+
void Triple::getOSVersion(unsigned &Major, unsigned &Minor,
unsigned &Micro) const {
StringRef OSName = getOSName();
@@ -796,22 +835,7 @@ void Triple::getOSVersion(unsigned &Majo
if (OSName.startswith(OSTypeName))
OSName = OSName.substr(OSTypeName.size());
- // Any unset version defaults to 0.
- Major = Minor = Micro = 0;
-
- // Parse up to three components.
- unsigned *Components[3] = { &Major, &Minor, &Micro };
- for (unsigned i = 0; i != 3; ++i) {
- if (OSName.empty() || OSName[0] < '0' || OSName[0] > '9')
- break;
-
- // Consume the leading number.
- *Components[i] = EatNumber(OSName);
-
- // Consume the separator, if present.
- if (OSName.startswith("."))
- OSName = OSName.substr(1);
- }
+ parseVersionFromName(OSName, Major, Minor, Micro);
}
bool Triple::getMacOSXVersion(unsigned &Major, unsigned &Minor,
More information about the llvm-commits
mailing list