You've already forked linux-packaging-mono
Imported Upstream version 6.0.0.172
Former-commit-id: f3cc9b82f3e5bd8f0fd3ebc098f789556b44e9cd
This commit is contained in:
parent
8016999e4d
commit
64ac736ec5
108
external/llvm/lib/DebugInfo/PDB/Native/NativeEnumSymbol.cpp
vendored
Normal file
108
external/llvm/lib/DebugInfo/PDB/Native/NativeEnumSymbol.cpp
vendored
Normal file
@ -0,0 +1,108 @@
|
||||
//===- NativeEnumSymbol.cpp - info about enum type --------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/DebugInfo/PDB/Native/NativeEnumSymbol.h"
|
||||
|
||||
#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h"
|
||||
#include "llvm/DebugInfo/CodeView/TypeRecord.h"
|
||||
#include "llvm/DebugInfo/PDB/Native/NativeEnumTypes.h"
|
||||
#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvm::pdb;
|
||||
|
||||
NativeEnumSymbol::NativeEnumSymbol(NativeSession &Session, SymIndexId Id,
|
||||
const codeview::CVType &CVT)
|
||||
: NativeRawSymbol(Session, Id), CV(CVT),
|
||||
Record(codeview::TypeRecordKind::Enum) {
|
||||
assert(CV.kind() == codeview::TypeLeafKind::LF_ENUM);
|
||||
cantFail(visitTypeRecord(CV, *this));
|
||||
}
|
||||
|
||||
NativeEnumSymbol::~NativeEnumSymbol() {}
|
||||
|
||||
std::unique_ptr<NativeRawSymbol> NativeEnumSymbol::clone() const {
|
||||
return llvm::make_unique<NativeEnumSymbol>(Session, SymbolId, CV);
|
||||
}
|
||||
|
||||
std::unique_ptr<IPDBEnumSymbols>
|
||||
NativeEnumSymbol::findChildren(PDB_SymType Type) const {
|
||||
switch (Type) {
|
||||
case PDB_SymType::Data: {
|
||||
// TODO(amccarth): Provide an actual implementation.
|
||||
return nullptr;
|
||||
}
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
Error NativeEnumSymbol::visitKnownRecord(codeview::CVType &CVR,
|
||||
codeview::EnumRecord &ER) {
|
||||
Record = ER;
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
Error NativeEnumSymbol::visitKnownMember(codeview::CVMemberRecord &CVM,
|
||||
codeview::EnumeratorRecord &R) {
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
PDB_SymType NativeEnumSymbol::getSymTag() const { return PDB_SymType::Enum; }
|
||||
|
||||
uint32_t NativeEnumSymbol::getClassParentId() const { return 0xFFFFFFFF; }
|
||||
|
||||
uint32_t NativeEnumSymbol::getUnmodifiedTypeId() const { return 0; }
|
||||
|
||||
bool NativeEnumSymbol::hasConstructor() const {
|
||||
return bool(Record.getOptions() &
|
||||
codeview::ClassOptions::HasConstructorOrDestructor);
|
||||
}
|
||||
|
||||
bool NativeEnumSymbol::hasAssignmentOperator() const {
|
||||
return bool(Record.getOptions() &
|
||||
codeview::ClassOptions::HasOverloadedAssignmentOperator);
|
||||
}
|
||||
|
||||
bool NativeEnumSymbol::hasCastOperator() const {
|
||||
return bool(Record.getOptions() &
|
||||
codeview::ClassOptions::HasConversionOperator);
|
||||
}
|
||||
|
||||
uint64_t NativeEnumSymbol::getLength() const {
|
||||
const auto Id = Session.findSymbolByTypeIndex(Record.getUnderlyingType());
|
||||
const auto UnderlyingType =
|
||||
Session.getConcreteSymbolById<PDBSymbolTypeBuiltin>(Id);
|
||||
return UnderlyingType ? UnderlyingType->getLength() : 0;
|
||||
}
|
||||
|
||||
std::string NativeEnumSymbol::getName() const { return Record.getName(); }
|
||||
|
||||
bool NativeEnumSymbol::isNested() const {
|
||||
return bool(Record.getOptions() & codeview::ClassOptions::Nested);
|
||||
}
|
||||
|
||||
bool NativeEnumSymbol::hasOverloadedOperator() const {
|
||||
return bool(Record.getOptions() &
|
||||
codeview::ClassOptions::HasOverloadedOperator);
|
||||
}
|
||||
|
||||
bool NativeEnumSymbol::isPacked() const {
|
||||
return bool(Record.getOptions() & codeview::ClassOptions::Packed);
|
||||
}
|
||||
|
||||
bool NativeEnumSymbol::isScoped() const {
|
||||
return bool(Record.getOptions() & codeview::ClassOptions::Scoped);
|
||||
}
|
||||
|
||||
uint32_t NativeEnumSymbol::getTypeId() const {
|
||||
return Session.findSymbolByTypeIndex(Record.getUnderlyingType());
|
||||
}
|
Reference in New Issue
Block a user