diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2009-11-08 10:08:52 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2009-11-08 10:08:52 +0200 |
commit | 907b5fed58d53bbb5e25c590df97f01a0ac93733 (patch) | |
tree | ed0be81e05cdcacac39879ed71f40cedc9f81a92 /cli/parser.cxx | |
parent | 2e8197d1e910eeae607af3a1f581b212402c0caf (diff) |
Implement option documentation support in frontend
Diffstat (limited to 'cli/parser.cxx')
-rw-r--r-- | cli/parser.cxx | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/cli/parser.cxx b/cli/parser.cxx index 55c609a..639ddf4 100644 --- a/cli/parser.cxx +++ b/cli/parser.cxx @@ -532,6 +532,51 @@ option_def (token& t) unit_->new_edge<initialized> (*o, e); } + if (t.punctuation () == token::p_lcbrace) + { + // doc-string-seq + // + for (t = lexer_->next ();; t = lexer_->next ()) + { + if (t.type () != token::t_string_lit) + { + cerr << *path_ << ':' << t.line () << ':' << t.column () << ": error: " + << "expected documentation string instead of " << t << endl; + throw error (); + } + + if (valid_) + { + // Get rid of '"'. + // + string r; + string const& l (t.literal ()); + + for (size_t i (0), n (l.size ()); i < n; ++i) + { + if (l[i] != '"' || (i != 0 && l[i - 1] == '\\')) + r += l[i]; + } + + o->doc ().push_back (r); + } + + t = lexer_->next (); + + if (t.punctuation () != token::p_comma) + break; + } + + if (t.punctuation () != token::p_rcbrace) + { + cerr << *path_ << ':' << t.line () << ':' << t.column () << ": error: " + << "expected '}' instead of " << t << endl; + throw error (); + } + + t = lexer_->next (); + } + if (t.punctuation () != token::p_semi) { cerr << *path_ << ':' << t.line () << ':' << t.column () << ": error: " |