summaryrefslogtreecommitdiffstats
path: root/src/depfile_parser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/depfile_parser.cc')
-rw-r--r--src/depfile_parser.cc40
1 files changed, 24 insertions, 16 deletions
diff --git a/src/depfile_parser.cc b/src/depfile_parser.cc
index 54b934c..6887c91 100644
--- a/src/depfile_parser.cc
+++ b/src/depfile_parser.cc
@@ -56,8 +56,8 @@ bool DepfileParser::Parse(string* content, string* err) {
0, 0, 0, 0, 0, 0, 0, 0,
128, 128, 0, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 0, 0, 128, 0, 0,
+ 128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 0, 0, 0, 0, 128,
@@ -84,27 +84,35 @@ bool DepfileParser::Parse(string* content, string* err) {
};
yych = *in;
- if (yych <= '[') {
+ if (yych <= 'Z') {
if (yych <= '*') {
if (yych <= 0x00) goto yy6;
if (yych <= '\'') goto yy8;
if (yych <= ')') goto yy4;
goto yy8;
} else {
- if (yych <= ':') goto yy4;
- if (yych <= '@') goto yy8;
- if (yych <= 'Z') goto yy4;
- goto yy8;
+ if (yych <= '<') {
+ if (yych <= ':') goto yy4;
+ goto yy8;
+ } else {
+ if (yych <= '=') goto yy4;
+ if (yych <= '?') goto yy8;
+ goto yy4;
+ }
}
} else {
- if (yych <= '`') {
- if (yych <= '\\') goto yy2;
- if (yych == '_') goto yy4;
- goto yy8;
+ if (yych <= '_') {
+ if (yych == '\\') goto yy2;
+ if (yych <= '^') goto yy8;
+ goto yy4;
} else {
- if (yych <= 'z') goto yy4;
- if (yych == '~') goto yy4;
- goto yy8;
+ if (yych <= 'z') {
+ if (yych <= '`') goto yy8;
+ goto yy4;
+ } else {
+ if (yych == '~') goto yy4;
+ goto yy8;
+ }
}
}
yy2:
@@ -141,7 +149,7 @@ yy4:
yy5:
{
// Got a span of plain text.
- int len = in - start;
+ int len = (int)(in - start);
// Need to shift it over if we're overwriting backslashes.
if (out < start)
memmove(out, start, len);
@@ -183,7 +191,7 @@ yy13:
}
- int len = out - filename;
+ int len = (int)(out - filename);
const bool is_target = parsing_targets;
if (len > 0 && filename[len - 1] == ':') {
len--; // Strip off trailing colon, if any.