From ed158b59063cd238a12bb022b465ebf491b43ef6 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 11 Jun 2015 16:14:55 +0200 Subject: Minor fixes to manifest parser --- bpkg/manifest-parser | 8 ++++++-- bpkg/manifest-parser.cxx | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 14 deletions(-) (limited to 'bpkg') diff --git a/bpkg/manifest-parser b/bpkg/manifest-parser index 2b1e4a5..070cb77 100644 --- a/bpkg/manifest-parser +++ b/bpkg/manifest-parser @@ -35,8 +35,9 @@ namespace bpkg const std::string& name () const {return name_;} - struct name_value_type + class name_value_type { + public: std::string name; std::string value; @@ -45,6 +46,9 @@ namespace bpkg std::uint64_t value_line; std::uint64_t value_column; + + bool + empty () const {return name.empty () && value.empty ();} }; // The first returned pair is special "start-of-manifest" with @@ -121,7 +125,7 @@ namespace bpkg } private: - enum {start, body, eos} s_ = start; + enum {start, body, end} s_ = start; std::string version_; // Current format version. private: diff --git a/bpkg/manifest-parser.cxx b/bpkg/manifest-parser.cxx index 374de3e..68fd073 100644 --- a/bpkg/manifest-parser.cxx +++ b/bpkg/manifest-parser.cxx @@ -11,12 +11,13 @@ using namespace std; namespace bpkg { + using parsing = manifest_parsing; using name_value = manifest_parser::name_value_type; name_value manifest_parser:: next () { - if (s_ == eos) + if (s_ == end) return name_value {"", "", l_, c_, l_, c_}; xchar c (skip_spaces ()); @@ -53,10 +54,10 @@ namespace bpkg // This is ok as long as the name is empty. // if (!r.name.empty ()) - throw manifest_parsing (name_, c.line (), c.column (), - "':' expected after name"); + throw parsing (name_, c.line (), c.column (), + "':' expected after name"); - s_ = eos; + s_ = end; // The "end" pair. // @@ -66,8 +67,7 @@ namespace bpkg } if (c != ':') - throw manifest_parsing (name_, c.line (), c.column (), - "':' expected after name"); + throw parsing (name_, c.line (), c.column (), "':' expected after name"); skip_spaces (); parse_value (r); @@ -90,8 +90,8 @@ namespace bpkg // special empty name/format version. // if (!r.name.empty ()) - throw manifest_parsing (name_, r.name_line, r.name_column, - "format version pair expected"); + throw parsing (name_, r.name_line, r.name_column, + "format version pair expected"); // The version value is only mandatory for the first manifest in // a sequence. @@ -99,8 +99,8 @@ namespace bpkg if (r.value.empty ()) { if (version_.empty ()) - throw manifest_parsing (name_, r.value_line, r.value_column, - "format version value expected"); + throw parsing (name_, r.value_line, r.value_column, + "format version value expected"); r.value = version_; } else @@ -108,8 +108,8 @@ namespace bpkg version_ = r.value; // Update with the latest. if (version_ != "1") - throw manifest_parsing (name_, r.value_line, r.value_column, - "unsupported format version " + version_); + throw parsing (name_, r.value_line, r.value_column, + "unsupported format version " + version_); } s_ = body; -- cgit v1.1