Index: tools/gn/parse_tree.cc |
diff --git a/tools/gn/parse_tree.cc b/tools/gn/parse_tree.cc |
index d22adca5c4b5f2d380d1f7167a769e1ec6bb985c..f7e7ce5838a2c17e20091d446ee1d2852b0b045e 100644 |
--- a/tools/gn/parse_tree.cc |
+++ b/tools/gn/parse_tree.cc |
@@ -16,6 +16,26 @@ |
namespace { |
+enum DepsCategory { |
+ kDepsCategoryRelative = 0, |
+ kDepsCategoryLocal = 1, |
+ kDepsCategoryAbsolute = 2, |
+ kDepsCategoryOther = 3, |
+}; |
+ |
+DepsCategory GetDepsCategory(base::StringPiece deps) { |
+ if (deps.length() < 2 || deps[0] != '"' || deps[deps.size() - 1] != '"') |
+ return kDepsCategoryOther; |
+ |
+ if (deps[1] == ':') |
+ return kDepsCategoryLocal; |
+ |
+ if (deps[1] == '/') |
+ return kDepsCategoryAbsolute; |
+ |
+ return kDepsCategoryRelative; |
+} |
+ |
std::tuple<base::StringPiece, base::StringPiece> SplitAtFirst( |
base::StringPiece str, |
char c) { |
@@ -590,7 +610,8 @@ void ListNode::SortAsDepsList() { |
SortList([](const ParseNode* a, const ParseNode* b) { |
base::StringPiece astr = GetStringRepresentation(a); |
base::StringPiece bstr = GetStringRepresentation(b); |
- return SplitAtFirst(astr, ':') < SplitAtFirst(bstr, ':'); |
+ return std::make_pair(GetDepsCategory(astr), SplitAtFirst(astr, ':')) < |
+ std::make_pair(GetDepsCategory(bstr), SplitAtFirst(bstr, ':')); |
}); |
} |