OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 18 matching lines...) Expand all Loading... |
29 #define V8_DATEPARSER_H_ | 29 #define V8_DATEPARSER_H_ |
30 | 30 |
31 #include "allocation.h" | 31 #include "allocation.h" |
32 #include "char-predicates-inl.h" | 32 #include "char-predicates-inl.h" |
33 | 33 |
34 namespace v8 { | 34 namespace v8 { |
35 namespace internal { | 35 namespace internal { |
36 | 36 |
37 class DateParser : public AllStatic { | 37 class DateParser : public AllStatic { |
38 public: | 38 public: |
39 | |
40 // Parse the string as a date. If parsing succeeds, return true after | 39 // Parse the string as a date. If parsing succeeds, return true after |
41 // filling out the output array as follows (all integers are Smis): | 40 // filling out the output array as follows (all integers are Smis): |
42 // [0]: year | 41 // [0]: year |
43 // [1]: month (0 = Jan, 1 = Feb, ...) | 42 // [1]: month (0 = Jan, 1 = Feb, ...) |
44 // [2]: day | 43 // [2]: day |
45 // [3]: hour | 44 // [3]: hour |
46 // [4]: minute | 45 // [4]: minute |
47 // [5]: second | 46 // [5]: second |
48 // [6]: millisecond | 47 // [6]: millisecond |
49 // [7]: UTC offset in seconds, or null value if no timezone specified | 48 // [7]: UTC offset in seconds, or null value if no timezone specified |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 } | 226 } |
228 static DateToken WhiteSpace(int length) { | 227 static DateToken WhiteSpace(int length) { |
229 return DateToken(kWhiteSpaceTag, length, -1); | 228 return DateToken(kWhiteSpaceTag, length, -1); |
230 } | 229 } |
231 static DateToken Unknown() { | 230 static DateToken Unknown() { |
232 return DateToken(kUnknownTokenTag, 1, -1); | 231 return DateToken(kUnknownTokenTag, 1, -1); |
233 } | 232 } |
234 static DateToken Invalid() { | 233 static DateToken Invalid() { |
235 return DateToken(kInvalidTokenTag, 0, -1); | 234 return DateToken(kInvalidTokenTag, 0, -1); |
236 } | 235 } |
| 236 |
237 private: | 237 private: |
238 enum TagType { | 238 enum TagType { |
239 kInvalidTokenTag = -6, | 239 kInvalidTokenTag = -6, |
240 kUnknownTokenTag = -5, | 240 kUnknownTokenTag = -5, |
241 kWhiteSpaceTag = -4, | 241 kWhiteSpaceTag = -4, |
242 kNumberTag = -3, | 242 kNumberTag = -3, |
243 kSymbolTag = -2, | 243 kSymbolTag = -2, |
244 kEndOfInputTag = -1, | 244 kEndOfInputTag = -1, |
245 kKeywordTagStart = 0 | 245 kKeywordTagStart = 0 |
246 }; | 246 }; |
(...skipping 21 matching lines...) Expand all Loading... |
268 DateToken Peek() { | 268 DateToken Peek() { |
269 return next_; | 269 return next_; |
270 } | 270 } |
271 bool SkipSymbol(char symbol) { | 271 bool SkipSymbol(char symbol) { |
272 if (next_.IsSymbol(symbol)) { | 272 if (next_.IsSymbol(symbol)) { |
273 next_ = Scan(); | 273 next_ = Scan(); |
274 return true; | 274 return true; |
275 } | 275 } |
276 return false; | 276 return false; |
277 } | 277 } |
| 278 |
278 private: | 279 private: |
279 DateToken Scan(); | 280 DateToken Scan(); |
280 | 281 |
281 InputReader<Char>* in_; | 282 InputReader<Char>* in_; |
282 DateToken next_; | 283 DateToken next_; |
283 }; | 284 }; |
284 | 285 |
285 static int ReadMilliseconds(DateToken number); | 286 static int ReadMilliseconds(DateToken number); |
286 | 287 |
287 // KeywordTable maps names of months, time zones, am/pm to numbers. | 288 // KeywordTable maps names of months, time zones, am/pm to numbers. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 if (!Add(n)) return false; | 345 if (!Add(n)) return false; |
345 while (index_ < kSize) comp_[index_++] = 0; | 346 while (index_ < kSize) comp_[index_++] = 0; |
346 return true; | 347 return true; |
347 } | 348 } |
348 void SetHourOffset(int n) { hour_offset_ = n; } | 349 void SetHourOffset(int n) { hour_offset_ = n; } |
349 bool Write(FixedArray* output); | 350 bool Write(FixedArray* output); |
350 | 351 |
351 static bool IsMinute(int x) { return Between(x, 0, 59); } | 352 static bool IsMinute(int x) { return Between(x, 0, 59); } |
352 static bool IsHour(int x) { return Between(x, 0, 23); } | 353 static bool IsHour(int x) { return Between(x, 0, 23); } |
353 static bool IsSecond(int x) { return Between(x, 0, 59); } | 354 static bool IsSecond(int x) { return Between(x, 0, 59); } |
| 355 |
354 private: | 356 private: |
355 static bool IsHour12(int x) { return Between(x, 0, 12); } | 357 static bool IsHour12(int x) { return Between(x, 0, 12); } |
356 static bool IsMillisecond(int x) { return Between(x, 0, 999); } | 358 static bool IsMillisecond(int x) { return Between(x, 0, 999); } |
357 | 359 |
358 static const int kSize = 4; | 360 static const int kSize = 4; |
359 int comp_[kSize]; | 361 int comp_[kSize]; |
360 int index_; | 362 int index_; |
361 int hour_offset_; | 363 int hour_offset_; |
362 }; | 364 }; |
363 | 365 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 DateStringTokenizer<Char>* scanner, | 400 DateStringTokenizer<Char>* scanner, |
399 DayComposer* day, | 401 DayComposer* day, |
400 TimeComposer* time, | 402 TimeComposer* time, |
401 TimeZoneComposer* tz); | 403 TimeZoneComposer* tz); |
402 }; | 404 }; |
403 | 405 |
404 | 406 |
405 } } // namespace v8::internal | 407 } } // namespace v8::internal |
406 | 408 |
407 #endif // V8_DATEPARSER_H_ | 409 #endif // V8_DATEPARSER_H_ |
OLD | NEW |