mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 16:37:42 +00:00
[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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238796 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d421582e90
commit
3fcfa4873a
@ -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; }
|
||||
|
||||
|
@ -702,6 +702,16 @@ std::string Triple::normalize(StringRef Str) {
|
||||
|
||||
// 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 &Major, unsigned &Minor,
|
||||
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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user