summaryrefslogtreecommitdiffstats
path: root/src/eval_env.cc
diff options
context:
space:
mode:
authorAlexei Svitkine <asvitkine@google.com>2011-04-26 18:49:49 (GMT)
committerEvan Martin <martine@danga.com>2011-04-26 18:49:49 (GMT)
commit2f6ac73dad3806e771761af3a58d43d434337a4b (patch)
treede9266a1e7a635f66299a2847c6c66d894ad6637 /src/eval_env.cc
parent5c192cda0788faeed93b3ba03a6830ed43762b24 (diff)
downloadNinja-2f6ac73dad3806e771761af3a58d43d434337a4b.zip
Ninja-2f6ac73dad3806e771761af3a58d43d434337a4b.tar.gz
Ninja-2f6ac73dad3806e771761af3a58d43d434337a4b.tar.bz2
include location of error in parse error messages in EvalEnv strings
E.g. when parsing "foo = ${bar", point at the correct location of the missing curly brace.
Diffstat (limited to 'src/eval_env.cc')
-rw-r--r--src/eval_env.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/eval_env.cc b/src/eval_env.cc
index 6b89b9c..8633f85 100644
--- a/src/eval_env.cc
+++ b/src/eval_env.cc
@@ -27,7 +27,7 @@ void BindingEnv::AddBinding(const string& key, const string& val) {
bindings_[key] = val;
}
-bool EvalString::Parse(const string& input, string* err) {
+bool EvalString::Parse(const string& input, string* err, size_t* err_index) {
unparsed_ = input;
string::size_type start, end;
@@ -49,6 +49,8 @@ bool EvalString::Parse(const string& input, string* err) {
}
if (end >= input.size()) {
*err = "expected closing curly after ${";
+ if (err_index)
+ *err_index = end;
return false;
}
parsed_.push_back(make_pair(input.substr(start, end - start), SPECIAL));
@@ -63,6 +65,8 @@ bool EvalString::Parse(const string& input, string* err) {
}
if (end == start) {
*err = "expected variable after $";
+ if (err_index)
+ *err_index = start;
return false;
}
parsed_.push_back(make_pair(input.substr(start, end - start), SPECIAL));