From 64593b859fb39b2493f0c8774ae95932a7292e85 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 12 Feb 2014 18:22:18 +0000 Subject: [PATCH] Attributes: Emit enumerators in td file declaration order git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201246 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/ClangAttrEmitter.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/utils/TableGen/ClangAttrEmitter.cpp b/utils/TableGen/ClangAttrEmitter.cpp index 26c5faf593..63225767c2 100644 --- a/utils/TableGen/ClangAttrEmitter.cpp +++ b/utils/TableGen/ClangAttrEmitter.cpp @@ -606,6 +606,22 @@ namespace { } }; + // Unique the enums, but maintain the original declaration ordering. + std::vector uniqueEnumsInOrder(std::vector enums) { + std::vector uniques; + std::set unique_set(enums.begin(), enums.end()); + for (std::vector::const_iterator i = enums.begin(), + e = enums.end(); + i != e; ++i) { + std::set::iterator set_i = unique_set.find(*i); + if (set_i != unique_set.end()) { + uniques.push_back(*i); + unique_set.erase(set_i); + } + } + return uniques; + } + class EnumArgument : public Argument { std::string type; std::vector values, enums, uniques; @@ -614,11 +630,8 @@ namespace { : Argument(Arg, Attr), type(Arg.getValueAsString("Type")), values(Arg.getValueAsListOfStrings("Values")), enums(Arg.getValueAsListOfStrings("Enums")), - uniques(enums) + uniques(uniqueEnumsInOrder(enums)) { - // Calculate the various enum values - std::sort(uniques.begin(), uniques.end()); - uniques.erase(std::unique(uniques.begin(), uniques.end()), uniques.end()); // FIXME: Emit a proper error assert(!uniques.empty()); } @@ -711,12 +724,8 @@ namespace { type(Arg.getValueAsString("Type")), values(Arg.getValueAsListOfStrings("Values")), enums(Arg.getValueAsListOfStrings("Enums")), - uniques(enums) + uniques(uniqueEnumsInOrder(enums)) { - // Calculate the various enum values - std::sort(uniques.begin(), uniques.end()); - uniques.erase(std::unique(uniques.begin(), uniques.end()), uniques.end()); - QualifiedTypeName = getAttrName().str() + "Attr::" + type; // FIXME: Emit a proper error -- 2.40.0