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;
|
const lld::File *_content;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// The content bytes in a DefinedAtom are just uint8_t but we want
|
// The content bytes in a DefinedAtom are just uint8_t but we want
|
||||||
// special formatting, so define a strong type.
|
// 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
|
// SharedLibraryAtoms have a bool canBeNull() method which we'd like to be
|
||||||
// more readable than just true/false.
|
// 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
|
// lld::Reference::Kind is a typedef of int32. We need a stronger
|
||||||
// type to make template matching work, so invent RefKind.
|
// 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
|
} // 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
|
// This is a custom formatter for RefKind
|
||||||
template<>
|
template<>
|
||||||
struct ScalarTraits<RefKind> {
|
struct ScalarTraits<RefKind> {
|
||||||
|
|
@ -531,7 +542,6 @@ struct MappingTraits<ArchMember> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
LLVM_YAML_IS_SEQUENCE_VECTOR(ArchMember);
|
|
||||||
|
|
||||||
|
|
||||||
// Declare that an AtomList is a yaml sequence.
|
// 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*>
|
// YAML conversion for std::vector<const lld::File*>
|
||||||
template<>
|
template<>
|
||||||
|
|
@ -808,7 +815,6 @@ struct MappingTraits<const lld::Reference*> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
LLVM_YAML_IS_SEQUENCE_VECTOR(const lld::Reference*)
|
|
||||||
|
|
||||||
|
|
||||||
// YAML conversion for const lld::DefinedAtom*
|
// 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*
|
// YAML conversion for const lld::UndefinedAtom*
|
||||||
template <>
|
template <>
|
||||||
struct MappingTraits<const lld::UndefinedAtom*> {
|
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) {
|
RefNameResolver::RefNameResolver(const lld::File *file, IO &io) : _io(io) {
|
||||||
typedef MappingTraits<const lld::DefinedAtom*>::NormalizedAtom NormalizedAtom;
|
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
|
inline
|
||||||
llvm::StringRef MappingTraits<const lld::Reference*>::NormalizedReference::
|
llvm::StringRef MappingTraits<const lld::Reference*>::NormalizedReference::
|
||||||
targetName(IO &io, const lld::Reference *ref) {
|
targetName(IO &io, const lld::Reference *ref) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue