mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
We've been running doxygen with the autobrief option for a couple of
years now. This makes the \brief markers into our comments
redundant. Since they are a visual distraction and we don't want to
encourage more \brief markers in new code either, this patch removes
them all.
Patch produced by
for i in $(git grep -l '\\brief'); do perl -pi -e 's/\\brief //g' $i & done
127 lines
2.9 KiB
C++
127 lines
2.9 KiB
C++
//===- tapi/Core/ArchitectureSupport.cpp - Architecture Support -*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// \file
|
|
/// Implements architecture specific helper functions.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "ArchitectureSupport.h"
|
|
#include "LLVM.h"
|
|
#include "clang/Basic/Diagnostic.h"
|
|
#include "llvm/ADT/SmallString.h"
|
|
#include "llvm/ADT/SmallVector.h"
|
|
#include "llvm/ADT/StringExtras.h"
|
|
#include "llvm/Support/Format.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
using namespace llvm;
|
|
|
|
TAPI_NAMESPACE_INTERNAL_BEGIN
|
|
|
|
bool PackedVersion::parse32(StringRef str) {
|
|
_version = 0;
|
|
|
|
if (str.empty())
|
|
return false;
|
|
|
|
SmallVector<StringRef, 3> parts;
|
|
SplitString(str, parts, ".");
|
|
|
|
if (parts.size() > 3)
|
|
return false;
|
|
|
|
unsigned long long num;
|
|
if (getAsUnsignedInteger(parts[0], 10, num))
|
|
return false;
|
|
|
|
if (num > UINT16_MAX)
|
|
return false;
|
|
|
|
_version = num << 16;
|
|
|
|
for (unsigned i = 1, shiftNum = 8; i < parts.size(); ++i, shiftNum -= 8) {
|
|
if (getAsUnsignedInteger(parts[i], 10, num))
|
|
return false;
|
|
|
|
if (num > UINT8_MAX)
|
|
return false;
|
|
|
|
_version |= (num << shiftNum);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
std::pair<bool, bool> PackedVersion::parse64(StringRef str) {
|
|
bool truncated = false;
|
|
_version = 0;
|
|
|
|
if (str.empty())
|
|
return std::make_pair(false, truncated);
|
|
|
|
SmallVector<StringRef, 5> parts;
|
|
SplitString(str, parts, ".");
|
|
|
|
if (parts.size() > 5)
|
|
return std::make_pair(false, truncated);
|
|
|
|
unsigned long long num;
|
|
if (getAsUnsignedInteger(parts[0], 10, num))
|
|
return std::make_pair(false, truncated);
|
|
|
|
if (num > 0xFFFFFFULL)
|
|
return std::make_pair(false, truncated);
|
|
|
|
if (num > 0xFFFFULL) {
|
|
num = 0xFFFFULL;
|
|
truncated = true;
|
|
}
|
|
_version = num << 16;
|
|
|
|
for (unsigned i = 1, shiftNum = 8; i < parts.size() && i < 3;
|
|
++i, shiftNum -= 8) {
|
|
if (getAsUnsignedInteger(parts[i], 10, num))
|
|
return std::make_pair(false, truncated);
|
|
|
|
if (num > 0x3FFULL)
|
|
return std::make_pair(false, truncated);
|
|
|
|
if (num > 0xFFULL) {
|
|
num = 0xFFULL;
|
|
truncated = true;
|
|
}
|
|
_version |= (num << shiftNum);
|
|
}
|
|
|
|
if (parts.size() > 3)
|
|
truncated = true;
|
|
|
|
return std::make_pair(true, truncated);
|
|
}
|
|
|
|
void PackedVersion::print(raw_ostream &os) const {
|
|
os << format("%d", getMajor());
|
|
if (getMinor() || getSubminor())
|
|
os << format(".%d", getMinor());
|
|
if (getSubminor())
|
|
os << format(".%d", getSubminor());
|
|
}
|
|
|
|
const DiagnosticBuilder &operator<<(const DiagnosticBuilder &db,
|
|
const PackedVersion &version) {
|
|
SmallString<32> string;
|
|
raw_svector_ostream os(string);
|
|
os << version;
|
|
db.AddString(string);
|
|
return db;
|
|
}
|
|
|
|
TAPI_NAMESPACE_INTERNAL_END
|