From 44a4cfb63d87dc0ba778982a1796673ca1513e90 Mon Sep 17 00:00:00 2001 From: "Michael J. Spencer" Date: Fri, 18 Oct 2013 22:38:04 +0000 Subject: [Support][YAML] Add support for accessing tags and tag handle substitution. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193004 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/yaml-bench/YAMLBench.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'utils/yaml-bench') diff --git a/utils/yaml-bench/YAMLBench.cpp b/utils/yaml-bench/YAMLBench.cpp index eef4a725a1..f20a4ccc81 100644 --- a/utils/yaml-bench/YAMLBench.cpp +++ b/utils/yaml-bench/YAMLBench.cpp @@ -63,6 +63,20 @@ static raw_ostream &operator <<(raw_ostream &os, const indent &in) { return os; } +/// \brief Pretty print a tag by replacing tag:yaml.org,2002: with !!. +static std::string prettyTag(yaml::Node *N) { + std::string Tag = N->getVerbatimTag(); + if (StringRef(Tag).startswith("tag:yaml.org,2002:")) { + std::string Ret = "!!"; + Ret += StringRef(Tag).substr(18); + return std::move(Ret); + } + std::string Ret = "!<"; + Ret += Tag; + Ret += ">"; + return Ret; +} + static void dumpNode( yaml::Node *n , unsigned Indent = 0 , bool SuppressFirstIndent = false) { @@ -76,9 +90,9 @@ static void dumpNode( yaml::Node *n if (yaml::ScalarNode *sn = dyn_cast(n)) { SmallString<32> Storage; StringRef Val = sn->getValue(Storage); - outs() << "!!str \"" << yaml::escape(Val) << "\""; + outs() << prettyTag(n) << " \"" << yaml::escape(Val) << "\""; } else if (yaml::SequenceNode *sn = dyn_cast(n)) { - outs() << "!!seq [\n"; + outs() << prettyTag(n) << " [\n"; ++Indent; for (yaml::SequenceNode::iterator i = sn->begin(), e = sn->end(); i != e; ++i) { @@ -88,7 +102,7 @@ static void dumpNode( yaml::Node *n --Indent; outs() << indent(Indent) << "]"; } else if (yaml::MappingNode *mn = dyn_cast(n)) { - outs() << "!!map {\n"; + outs() << prettyTag(n) << " {\n"; ++Indent; for (yaml::MappingNode::iterator i = mn->begin(), e = mn->end(); i != e; ++i) { @@ -104,7 +118,7 @@ static void dumpNode( yaml::Node *n } else if (yaml::AliasNode *an = dyn_cast(n)){ outs() << "*" << an->getName(); } else if (dyn_cast(n)) { - outs() << "!!null null"; + outs() << prettyTag(n) << " null"; } } -- cgit v1.2.3