From bd49198409d070ff593cbb94fbf62b1975f455b5 Mon Sep 17 00:00:00 2001 From: Nick Kledzik Date: Tue, 8 Jan 2013 23:51:03 +0000 Subject: [PATCH] add extra namespace for gcc-4.7 compatibility llvm-svn: 171918 --- .../ReaderWriter/YAML/ReaderWriterYAML.cpp | 91 ++++++++++--------- 1 file changed, 50 insertions(+), 41 deletions(-) diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp index cc1c12ea0cec..44234a135e47 100644 --- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp +++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp @@ -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 { @@ -531,7 +542,6 @@ struct MappingTraits { } }; -LLVM_YAML_IS_SEQUENCE_VECTOR(ArchMember); // Declare that an AtomList is a yaml sequence. @@ -567,9 +577,6 @@ struct ScalarTraits { } }; -// Always write DefinedAtoms content bytes as a flow sequence. -LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(ImplicitHex8); - // YAML conversion for std::vector template<> @@ -808,7 +815,6 @@ struct MappingTraits { } }; -LLVM_YAML_IS_SEQUENCE_VECTOR(const lld::Reference*) // YAML conversion for const lld::DefinedAtom* @@ -973,39 +979,6 @@ struct MappingTraits { -inline -const lld::File* -MappingTraits::NormalizedFile::denormalize(IO &io) { - typedef MappingTraits::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:: - NormalizedAtom::bind(const RefNameResolver &resolver) { - typedef MappingTraits::NormalizedReference - NormalizedReference; - for (const lld::Reference *ref : _references) { - NormalizedReference *normRef = (NormalizedReference*)ref; - normRef->bind(resolver); - } -} - -inline -void MappingTraits:: - NormalizedReference::bind(const RefNameResolver &resolver) { - _target = resolver.lookup(_targetName); -} - - - // YAML conversion for const lld::UndefinedAtom* template <> struct MappingTraits { @@ -1200,6 +1173,9 @@ struct MappingTraits { } }; +} // namespace llvm +} // namespace yaml + RefNameResolver::RefNameResolver(const lld::File *file, IO &io) : _io(io) { typedef MappingTraits::NormalizedAtom NormalizedAtom; @@ -1228,6 +1204,39 @@ RefNameResolver::RefNameResolver(const lld::File *file, IO &io) : _io(io) { } + +inline +const lld::File* +MappingTraits::NormalizedFile::denormalize(IO &io) { + typedef MappingTraits::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:: + NormalizedAtom::bind(const RefNameResolver &resolver) { + typedef MappingTraits::NormalizedReference + NormalizedReference; + for (const lld::Reference *ref : _references) { + NormalizedReference *normRef = (NormalizedReference*)ref; + normRef->bind(resolver); + } +} + +inline +void MappingTraits:: + NormalizedReference::bind(const RefNameResolver &resolver) { + _target = resolver.lookup(_targetName); +} + + inline llvm::StringRef MappingTraits::NormalizedReference:: targetName(IO &io, const lld::Reference *ref) {