forked from OSchip/llvm-project
add extra namespace for gcc-4.7 compatibility
llvm-svn: 171918
This commit is contained in:
parent
5eae4adf23
commit
bd49198409
|
@ -259,22 +259,33 @@ struct ArchMember {
|
|||
const lld::File *_content;
|
||||
};
|
||||
|
||||
|
||||
// The content bytes in a DefinedAtom are just uint8_t but we want
|
||||
// special formatting, so define a strong type.
|
||||
LLVM_YAML_STRONG_TYPEDEF(uint8_t, ImplicitHex8);
|
||||
LLVM_YAML_STRONG_TYPEDEF(uint8_t, ImplicitHex8)
|
||||
|
||||
// SharedLibraryAtoms have a bool canBeNull() method which we'd like to be
|
||||
// more readable than just true/false.
|
||||
LLVM_YAML_STRONG_TYPEDEF(bool, ShlibCanBeNull);
|
||||
LLVM_YAML_STRONG_TYPEDEF(bool, ShlibCanBeNull)
|
||||
|
||||
// lld::Reference::Kind is a typedef of int32. We need a stronger
|
||||
// type to make template matching work, so invent RefKind.
|
||||
LLVM_YAML_STRONG_TYPEDEF(lld::Reference::Kind, RefKind);
|
||||
LLVM_YAML_STRONG_TYPEDEF(lld::Reference::Kind, RefKind)
|
||||
|
||||
|
||||
} // namespace anon
|
||||
|
||||
|
||||
LLVM_YAML_IS_SEQUENCE_VECTOR(ArchMember);
|
||||
LLVM_YAML_IS_SEQUENCE_VECTOR(const lld::Reference*)
|
||||
|
||||
// Always write DefinedAtoms content bytes as a flow sequence.
|
||||
LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(ImplicitHex8);
|
||||
|
||||
// for compatibility with gcc-4.7 in C++11 mode, add extra namespace
|
||||
namespace llvm {
|
||||
namespace yaml {
|
||||
|
||||
// This is a custom formatter for RefKind
|
||||
template<>
|
||||
struct ScalarTraits<RefKind> {
|
||||
|
@ -531,7 +542,6 @@ struct MappingTraits<ArchMember> {
|
|||
}
|
||||
};
|
||||
|
||||
LLVM_YAML_IS_SEQUENCE_VECTOR(ArchMember);
|
||||
|
||||
|
||||
// Declare that an AtomList is a yaml sequence.
|
||||
|
@ -567,9 +577,6 @@ struct ScalarTraits<ImplicitHex8> {
|
|||
}
|
||||
};
|
||||
|
||||
// Always write DefinedAtoms content bytes as a flow sequence.
|
||||
LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(ImplicitHex8);
|
||||
|
||||
|
||||
// YAML conversion for std::vector<const lld::File*>
|
||||
template<>
|
||||
|
@ -808,7 +815,6 @@ struct MappingTraits<const lld::Reference*> {
|
|||
}
|
||||
};
|
||||
|
||||
LLVM_YAML_IS_SEQUENCE_VECTOR(const lld::Reference*)
|
||||
|
||||
|
||||
// YAML conversion for const lld::DefinedAtom*
|
||||
|
@ -973,39 +979,6 @@ struct MappingTraits<const lld::DefinedAtom*> {
|
|||
|
||||
|
||||
|
||||
inline
|
||||
const lld::File*
|
||||
MappingTraits<const lld::File*>::NormalizedFile::denormalize(IO &io) {
|
||||
typedef MappingTraits<const lld::DefinedAtom*>::NormalizedAtom NormalizedAtom;
|
||||
|
||||
RefNameResolver nameResolver(this, io);
|
||||
// Now that all atoms are parsed, references can be bound.
|
||||
for (const lld::DefinedAtom *a : this->defined() ) {
|
||||
NormalizedAtom *normAtom = (NormalizedAtom*)a;
|
||||
normAtom->bind(nameResolver);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
inline
|
||||
void MappingTraits<const lld::DefinedAtom*>::
|
||||
NormalizedAtom::bind(const RefNameResolver &resolver) {
|
||||
typedef MappingTraits<const lld::Reference*>::NormalizedReference
|
||||
NormalizedReference;
|
||||
for (const lld::Reference *ref : _references) {
|
||||
NormalizedReference *normRef = (NormalizedReference*)ref;
|
||||
normRef->bind(resolver);
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void MappingTraits<const lld::Reference*>::
|
||||
NormalizedReference::bind(const RefNameResolver &resolver) {
|
||||
_target = resolver.lookup(_targetName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// YAML conversion for const lld::UndefinedAtom*
|
||||
template <>
|
||||
struct MappingTraits<const lld::UndefinedAtom*> {
|
||||
|
@ -1200,6 +1173,9 @@ struct MappingTraits<const lld::AbsoluteAtom*> {
|
|||
}
|
||||
};
|
||||
|
||||
} // namespace llvm
|
||||
} // namespace yaml
|
||||
|
||||
|
||||
RefNameResolver::RefNameResolver(const lld::File *file, IO &io) : _io(io) {
|
||||
typedef MappingTraits<const lld::DefinedAtom*>::NormalizedAtom NormalizedAtom;
|
||||
|
@ -1228,6 +1204,39 @@ RefNameResolver::RefNameResolver(const lld::File *file, IO &io) : _io(io) {
|
|||
}
|
||||
|
||||
|
||||
|
||||
inline
|
||||
const lld::File*
|
||||
MappingTraits<const lld::File*>::NormalizedFile::denormalize(IO &io) {
|
||||
typedef MappingTraits<const lld::DefinedAtom*>::NormalizedAtom NormalizedAtom;
|
||||
|
||||
RefNameResolver nameResolver(this, io);
|
||||
// Now that all atoms are parsed, references can be bound.
|
||||
for (const lld::DefinedAtom *a : this->defined() ) {
|
||||
NormalizedAtom *normAtom = (NormalizedAtom*)a;
|
||||
normAtom->bind(nameResolver);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
inline
|
||||
void MappingTraits<const lld::DefinedAtom*>::
|
||||
NormalizedAtom::bind(const RefNameResolver &resolver) {
|
||||
typedef MappingTraits<const lld::Reference*>::NormalizedReference
|
||||
NormalizedReference;
|
||||
for (const lld::Reference *ref : _references) {
|
||||
NormalizedReference *normRef = (NormalizedReference*)ref;
|
||||
normRef->bind(resolver);
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void MappingTraits<const lld::Reference*>::
|
||||
NormalizedReference::bind(const RefNameResolver &resolver) {
|
||||
_target = resolver.lookup(_targetName);
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
llvm::StringRef MappingTraits<const lld::Reference*>::NormalizedReference::
|
||||
targetName(IO &io, const lld::Reference *ref) {
|
||||
|
|
Loading…
Reference in New Issue