26 if (file_reader_->ReadFile(filename, &contents, &read_err) !=
28 *err =
"loading '" + filename +
"': " + read_err;
30 parent->
Error(
string(*err), err);
39 contents.resize(contents.size() + 1);
41 return Parse(filename, contents, err);
46 if (token != expected) {
50 return lexer_.Error(message, err);
static const char * TokenErrorHint(Token expected)
Return a human-readable token hint, used in error messages.
bool Load(const std::string &filename, std::string *err, Lexer *parent=NULL)
Load and parse a file.
bool Error(const std::string &message, std::string *err)
Construct an error message with context.
#define METRIC_RECORD(name)
The primary interface to metrics.
static const char * TokenName(Token t)
Return a human-readable form of a token, used in error messages.
bool ExpectToken(Lexer::Token expected, std::string *err)
If the next token is not expected, produce an error string saying "expected foo, got bar"...