OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "tools/gn/tokenizer.h" | 5 #include "tools/gn/tokenizer.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "tools/gn/input_file.h" | 8 #include "tools/gn/input_file.h" |
9 | 9 |
10 namespace { | 10 namespace { |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 if (value == "<") | 57 if (value == "<") |
58 return Token::LESS_THAN; | 58 return Token::LESS_THAN; |
59 if (value == ">") | 59 if (value == ">") |
60 return Token::GREATER_THAN; | 60 return Token::GREATER_THAN; |
61 if (value == "&&") | 61 if (value == "&&") |
62 return Token::BOOLEAN_AND; | 62 return Token::BOOLEAN_AND; |
63 if (value == "||") | 63 if (value == "||") |
64 return Token::BOOLEAN_OR; | 64 return Token::BOOLEAN_OR; |
65 if (value == "!") | 65 if (value == "!") |
66 return Token::BANG; | 66 return Token::BANG; |
| 67 if (value == ".") |
| 68 return Token::DOT; |
67 return Token::INVALID; | 69 return Token::INVALID; |
68 } | 70 } |
69 | 71 |
70 } // namespace | 72 } // namespace |
71 | 73 |
72 Tokenizer::Tokenizer(const InputFile* input_file, Err* err) | 74 Tokenizer::Tokenizer(const InputFile* input_file, Err* err) |
73 : input_file_(input_file), | 75 : input_file_(input_file), |
74 input_(input_file->contents()), | 76 input_(input_file->contents()), |
75 err_(err), | 77 err_(err), |
76 cur_(0), | 78 cur_(0), |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 return Token::RIGHT_BRACKET; | 191 return Token::RIGHT_BRACKET; |
190 if (next_char == '(') | 192 if (next_char == '(') |
191 return Token::LEFT_PAREN; | 193 return Token::LEFT_PAREN; |
192 if (next_char == ')') | 194 if (next_char == ')') |
193 return Token::RIGHT_PAREN; | 195 return Token::RIGHT_PAREN; |
194 if (next_char == '{') | 196 if (next_char == '{') |
195 return Token::LEFT_BRACE; | 197 return Token::LEFT_BRACE; |
196 if (next_char == '}') | 198 if (next_char == '}') |
197 return Token::RIGHT_BRACE; | 199 return Token::RIGHT_BRACE; |
198 | 200 |
| 201 if (next_char == '.') |
| 202 return Token::DOT; |
199 if (next_char == ',') | 203 if (next_char == ',') |
200 return Token::COMMA; | 204 return Token::COMMA; |
201 | 205 |
202 if (next_char == '#') | 206 if (next_char == '#') |
203 return Token::COMMENT; | 207 return Token::COMMENT; |
204 | 208 |
205 // For the case of '-' differentiate between a negative number and anything | 209 // For the case of '-' differentiate between a negative number and anything |
206 // else. | 210 // else. |
207 if (next_char == '-') { | 211 if (next_char == '-') { |
208 if (!CanIncrement()) | 212 if (!CanIncrement()) |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 while (!at_end() && IsIdentifierContinuingChar(cur_char())) | 280 while (!at_end() && IsIdentifierContinuingChar(cur_char())) |
277 Advance(); | 281 Advance(); |
278 break; | 282 break; |
279 | 283 |
280 case Token::LEFT_BRACKET: | 284 case Token::LEFT_BRACKET: |
281 case Token::RIGHT_BRACKET: | 285 case Token::RIGHT_BRACKET: |
282 case Token::LEFT_BRACE: | 286 case Token::LEFT_BRACE: |
283 case Token::RIGHT_BRACE: | 287 case Token::RIGHT_BRACE: |
284 case Token::LEFT_PAREN: | 288 case Token::LEFT_PAREN: |
285 case Token::RIGHT_PAREN: | 289 case Token::RIGHT_PAREN: |
| 290 case Token::DOT: |
286 case Token::COMMA: | 291 case Token::COMMA: |
287 Advance(); // All are one char. | 292 Advance(); // All are one char. |
288 break; | 293 break; |
289 | 294 |
290 case Token::COMMENT: | 295 case Token::COMMENT: |
291 // Eat to EOL. | 296 // Eat to EOL. |
292 while (!at_end() && !IsCurrentNewline()) | 297 while (!at_end() && !IsCurrentNewline()) |
293 Advance(); | 298 Advance(); |
294 break; | 299 break; |
295 | 300 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 } else if (cur_char() == '/' && cur_ + 1 < input_.size() && | 361 } else if (cur_char() == '/' && cur_ + 1 < input_.size() && |
357 (input_[cur_ + 1] == '/' || input_[cur_ + 1] == '*')) { | 362 (input_[cur_ + 1] == '/' || input_[cur_ + 1] == '*')) { |
358 // Different types of comments. | 363 // Different types of comments. |
359 help = "Comments should start with # instead"; | 364 help = "Comments should start with # instead"; |
360 } else { | 365 } else { |
361 help = "I have no idea what this is."; | 366 help = "I have no idea what this is."; |
362 } | 367 } |
363 | 368 |
364 return Err(location, "Invalid token.", help); | 369 return Err(location, "Invalid token.", help); |
365 } | 370 } |
OLD | NEW |