summaryrefslogtreecommitdiffstats
path: root/src/lexer.in.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2012-08-02 22:24:32 (GMT)
committerEvan Martin <martine@danga.com>2012-08-02 22:28:25 (GMT)
commited07eb9f2f25ddee464e786f0f2f82e9e8a33e0a (patch)
tree3f90501c991d93e8902042201bd30a785a4127fb /src/lexer.in.cc
parent649ad87148d5b4998cac7ce82eff29648db02554 (diff)
downloadNinja-ed07eb9f2f25ddee464e786f0f2f82e9e8a33e0a.zip
Ninja-ed07eb9f2f25ddee464e786f0f2f82e9e8a33e0a.tar.gz
Ninja-ed07eb9f2f25ddee464e786f0f2f82e9e8a33e0a.tar.bz2
reject tabs (and CRs) in input files more aggressively
Diffstat (limited to 'src/lexer.in.cc')
-rw-r--r--src/lexer.in.cc37
1 files changed, 19 insertions, 18 deletions
diff --git a/src/lexer.in.cc b/src/lexer.in.cc
index 852d6e9..ec3ad6b 100644
--- a/src/lexer.in.cc
+++ b/src/lexer.in.cc
@@ -89,24 +89,25 @@ const char* Lexer::TokenName(Token t) {
return NULL; // not reached
}
-const char* Lexer::TokenErrorHint(Token t) {
- switch (t) {
- case ERROR: return "";
- case BUILD: return "";
- case COLON: return " ($ also escapes ':')";
- case DEFAULT: return "";
- case EQUALS: return "";
- case IDENT: return "";
- case INCLUDE: return "";
- case INDENT: return "";
- case NEWLINE: return "";
- case PIPE2: return "";
- case PIPE: return "";
- case RULE: return "";
- case SUBNINJA: return "";
- case TEOF: return "";
+const char* Lexer::TokenErrorHint(Token expected) {
+ switch (expected) {
+ case COLON:
+ return " ($ also escapes ':')";
+ default:
+ return "";
+ }
+}
+
+string Lexer::DescribeLastError() {
+ if (last_token_) {
+ switch (last_token_[0]) {
+ case '\r':
+ return "carriage returns are not allowed, use newlines";
+ case '\t':
+ return "tabs are not allowed, use spaces";
+ }
}
- return "";
+ return "lexing error";
}
void Lexer::UnreadToken() {
@@ -248,7 +249,7 @@ bool Lexer::ReadEvalString(EvalString* eval, bool path, string* err) {
}
[^] {
last_token_ = start;
- return Error("lexing error", err);
+ return Error(DescribeLastError(), err);
}
*/
}