Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: src/dateparser.h

Issue 1704016: Added support for ES5 date time string format to Date.parse. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 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 26 matching lines...) Expand all
37 public: 37 public:
38 38
39 // 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
40 // filling out the output array as follows (all integers are Smis): 40 // filling out the output array as follows (all integers are Smis):
41 // [0]: year 41 // [0]: year
42 // [1]: month (0 = Jan, 1 = Feb, ...) 42 // [1]: month (0 = Jan, 1 = Feb, ...)
43 // [2]: day 43 // [2]: day
44 // [3]: hour 44 // [3]: hour
45 // [4]: minute 45 // [4]: minute
46 // [5]: second 46 // [5]: second
47 // [6]: UTC offset in seconds, or null value if no timezone specified 47 // [6]: millisecond
48 // [7]: UTC offset in seconds, or null value if no timezone specified
48 // If parsing fails, return false (content of output array is not defined). 49 // If parsing fails, return false (content of output array is not defined).
49 template <typename Char> 50 template <typename Char>
50 static bool Parse(Vector<Char> str, FixedArray* output); 51 static bool Parse(Vector<Char> str, FixedArray* output);
51 52
52 enum { 53 enum {
53 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, UTC_OFFSET, OUTPUT_SIZE 54 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MILLISECOND, UTC_OFFSET, OUTPUT_SIZE
54 }; 55 };
55 56
56 private: 57 private:
57 // Range testing 58 // Range testing
58 static inline bool Between(int x, int lo, int hi) { 59 static inline bool Between(int x, int lo, int hi) {
59 return static_cast<unsigned>(x - lo) <= static_cast<unsigned>(hi - lo); 60 return static_cast<unsigned>(x - lo) <= static_cast<unsigned>(hi - lo);
60 } 61 }
61 // Indicates a missing value. 62 // Indicates a missing value.
62 static const int kNone = kMaxInt; 63 static const int kNone = kMaxInt;
63 64
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 int sign_; 183 int sign_;
183 int hour_; 184 int hour_;
184 int minute_; 185 int minute_;
185 }; 186 };
186 187
187 class TimeComposer BASE_EMBEDDED { 188 class TimeComposer BASE_EMBEDDED {
188 public: 189 public:
189 TimeComposer() : index_(0), hour_offset_(kNone) {} 190 TimeComposer() : index_(0), hour_offset_(kNone) {}
190 bool IsEmpty() const { return index_ == 0; } 191 bool IsEmpty() const { return index_ == 0; }
191 bool IsExpecting(int n) const { 192 bool IsExpecting(int n) const {
192 return (index_ == 1 && IsMinute(n)) || (index_ == 2 && IsSecond(n)); 193 return (index_ == 1 && IsMinute(n)) ||
194 (index_ == 2 && IsSecond(n)) ||
195 (index_ == 3 && IsMillisecond(n));
193 } 196 }
194 bool Add(int n) { 197 bool Add(int n) {
195 return index_ < kSize ? (comp_[index_++] = n, true) : false; 198 return index_ < kSize ? (comp_[index_++] = n, true) : false;
196 } 199 }
197 bool AddFinal(int n) { 200 bool AddFinal(int n) {
198 if (!Add(n)) return false; 201 if (!Add(n)) return false;
199 while (index_ < kSize) comp_[index_++] = 0; 202 while (index_ < kSize) comp_[index_++] = 0;
200 return true; 203 return true;
201 } 204 }
202 void SetHourOffset(int n) { hour_offset_ = n; } 205 void SetHourOffset(int n) { hour_offset_ = n; }
203 bool Write(FixedArray* output); 206 bool Write(FixedArray* output);
204 207
205 static bool IsMinute(int x) { return Between(x, 0, 59); } 208 static bool IsMinute(int x) { return Between(x, 0, 59); }
206 private: 209 private:
207 static bool IsHour(int x) { return Between(x, 0, 23); } 210 static bool IsHour(int x) { return Between(x, 0, 23); }
208 static bool IsHour12(int x) { return Between(x, 0, 12); } 211 static bool IsHour12(int x) { return Between(x, 0, 12); }
209 static bool IsSecond(int x) { return Between(x, 0, 59); } 212 static bool IsSecond(int x) { return Between(x, 0, 59); }
213 static bool IsMillisecond(int x) { return Between(x, 0, 999); }
210 214
211 static const int kSize = 3; 215 static const int kSize = 4;
212 int comp_[kSize]; 216 int comp_[kSize];
213 int index_; 217 int index_;
214 int hour_offset_; 218 int hour_offset_;
215 }; 219 };
216 220
217 class DayComposer BASE_EMBEDDED { 221 class DayComposer BASE_EMBEDDED {
218 public: 222 public:
219 DayComposer() : index_(0), named_month_(kNone) {} 223 DayComposer() : index_(0), named_month_(kNone) {}
220 bool IsEmpty() const { return index_ == 0; } 224 bool IsEmpty() const { return index_ == 0; }
221 bool Add(int n) { 225 bool Add(int n) {
222 return index_ < kSize ? (comp_[index_++] = n, true) : false; 226 return index_ < kSize ? (comp_[index_++] = n, true) : false;
223 } 227 }
224 void SetNamedMonth(int n) { named_month_ = n; } 228 void SetNamedMonth(int n) { named_month_ = n; }
225 bool Write(FixedArray* output); 229 bool Write(FixedArray* output);
226 private: 230 private:
227 static bool IsMonth(int x) { return Between(x, 1, 12); } 231 static bool IsMonth(int x) { return Between(x, 1, 12); }
228 static bool IsDay(int x) { return Between(x, 1, 31); } 232 static bool IsDay(int x) { return Between(x, 1, 31); }
229 233
230 static const int kSize = 3; 234 static const int kSize = 3;
231 int comp_[kSize]; 235 int comp_[kSize];
232 int index_; 236 int index_;
233 int named_month_; 237 int named_month_;
234 }; 238 };
235 }; 239 };
236 240
237 241
238 } } // namespace v8::internal 242 } } // namespace v8::internal
239 243
240 #endif // V8_DATEPARSER_H_ 244 #endif // V8_DATEPARSER_H_
OLDNEW
« no previous file with comments | « src/date.js ('k') | src/dateparser.cc » ('j') | test/mjsunit/date-parse.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698