diff options
author | Peter Kuemmel <syntheticpp@gmx.net> | 2012-01-29 11:28:52 (GMT) |
---|---|---|
committer | Peter Kuemmel <syntheticpp@gmx.net> | 2012-01-29 11:28:52 (GMT) |
commit | 88c9491f515f7ba479b5334ef834743fed539730 (patch) | |
tree | b039b3f4f94b616735d93b1df78a6accba806e33 /src/lexer.cc | |
parent | c8faeaa5a1c5e2f5e75d0f1be19c70479475c5ce (diff) | |
download | Ninja-88c9491f515f7ba479b5334ef834743fed539730.zip Ninja-88c9491f515f7ba479b5334ef834743fed539730.tar.gz Ninja-88c9491f515f7ba479b5334ef834743fed539730.tar.bz2 |
add colon escaping
Needed for Windows drive names.
For instance configure with gtest:
python configure.py --with-gtest=c$:\gtest-1.6.0
Diffstat (limited to 'src/lexer.cc')
-rw-r--r-- | src/lexer.cc | 52 |
1 files changed, 31 insertions, 21 deletions
diff --git a/src/lexer.cc b/src/lexer.cc index 5bc467b..a1bedf5 100644 --- a/src/lexer.cc +++ b/src/lexer.cc @@ -606,7 +606,7 @@ bool Lexer::ReadEvalString(EvalString* eval, bool path, string* err) { } ++p; yych = *p; - goto yy118; + goto yy120; yy91: { eval->AddText(StringPiece(start, p - start)); @@ -629,7 +629,7 @@ yy94: ++p; if ((yych = *p) <= '/') { if (yych <= ' ') { - if (yych == '\n') goto yy107; + if (yych == '\n') goto yy109; if (yych <= 0x1F) goto yy98; goto yy100; } else { @@ -643,17 +643,21 @@ yy94: } } else { if (yych <= '^') { - if (yych <= '9') goto yy104; - if (yych <= '@') goto yy98; - if (yych <= 'Z') goto yy104; - goto yy98; + if (yych <= ':') { + if (yych <= '9') goto yy104; + goto yy106; + } else { + if (yych <= '@') goto yy98; + if (yych <= 'Z') goto yy104; + goto yy98; + } } else { if (yych <= '`') { if (yych <= '_') goto yy104; goto yy98; } else { if (yych <= 'z') goto yy104; - if (yych <= '{') goto yy106; + if (yych <= '{') goto yy108; goto yy98; } } @@ -690,56 +694,62 @@ yy102: yy104: ++p; yych = *p; - goto yy116; + goto yy118; yy105: { eval->AddSpecial(StringPiece(start + 1, p - start - 1)); continue; } yy106: + ++p; + { + eval->AddText(StringPiece(":", 1)); + continue; + } +yy108: yych = *(q = ++p); if (yybm[0+yych] & 32) { - goto yy110; + goto yy112; } goto yy99; -yy107: +yy109: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy107; + goto yy109; } { continue; } -yy110: +yy112: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy110; + goto yy112; } - if (yych == '}') goto yy113; + if (yych == '}') goto yy115; p = q; goto yy99; -yy113: +yy115: ++p; { eval->AddSpecial(StringPiece(start + 2, p - start - 3)); continue; } -yy115: +yy117: ++p; yych = *p; -yy116: +yy118: if (yybm[0+yych] & 64) { - goto yy115; + goto yy117; } goto yy105; -yy117: +yy119: ++p; yych = *p; -yy118: +yy120: if (yybm[0+yych] & 128) { - goto yy117; + goto yy119; } goto yy91; } |