OLD | NEW |
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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 day = comp_[0]; | 65 day = comp_[0]; |
66 year = comp_[1]; | 66 year = comp_[1]; |
67 } | 67 } |
68 } | 68 } |
69 | 69 |
70 if (Between(year, 0, 49)) year += 2000; | 70 if (Between(year, 0, 49)) year += 2000; |
71 else if (Between(year, 50, 99)) year += 1900; | 71 else if (Between(year, 50, 99)) year += 1900; |
72 | 72 |
73 if (!Smi::IsValid(year) || !IsMonth(month) || !IsDay(day)) return false; | 73 if (!Smi::IsValid(year) || !IsMonth(month) || !IsDay(day)) return false; |
74 | 74 |
75 output->set(YEAR, | 75 output->set(YEAR, Smi::FromInt(year)); |
76 Smi::FromInt(year), | 76 output->set(MONTH, Smi::FromInt(month - 1)); // 0-based |
77 SKIP_WRITE_BARRIER); | 77 output->set(DAY, Smi::FromInt(day)); |
78 output->set(MONTH, | |
79 Smi::FromInt(month - 1), | |
80 SKIP_WRITE_BARRIER); // 0-based | |
81 output->set(DAY, | |
82 Smi::FromInt(day), | |
83 SKIP_WRITE_BARRIER); | |
84 return true; | 78 return true; |
85 } | 79 } |
86 | 80 |
87 | 81 |
88 bool DateParser::TimeComposer::Write(FixedArray* output) { | 82 bool DateParser::TimeComposer::Write(FixedArray* output) { |
89 // All time slots default to 0 | 83 // All time slots default to 0 |
90 while (index_ < kSize) { | 84 while (index_ < kSize) { |
91 comp_[index_++] = 0; | 85 comp_[index_++] = 0; |
92 } | 86 } |
93 | 87 |
94 int& hour = comp_[0]; | 88 int& hour = comp_[0]; |
95 int& minute = comp_[1]; | 89 int& minute = comp_[1]; |
96 int& second = comp_[2]; | 90 int& second = comp_[2]; |
97 | 91 |
98 if (hour_offset_ != kNone) { | 92 if (hour_offset_ != kNone) { |
99 if (!IsHour12(hour)) return false; | 93 if (!IsHour12(hour)) return false; |
100 hour %= 12; | 94 hour %= 12; |
101 hour += hour_offset_; | 95 hour += hour_offset_; |
102 } | 96 } |
103 | 97 |
104 if (!IsHour(hour) || !IsMinute(minute) || !IsSecond(second)) return false; | 98 if (!IsHour(hour) || !IsMinute(minute) || !IsSecond(second)) return false; |
105 | 99 |
106 output->set(HOUR, | 100 output->set(HOUR, Smi::FromInt(hour)); |
107 Smi::FromInt(hour), | 101 output->set(MINUTE, Smi::FromInt(minute)); |
108 SKIP_WRITE_BARRIER); | 102 output->set(SECOND, Smi::FromInt(second)); |
109 output->set(MINUTE, | |
110 Smi::FromInt(minute), | |
111 SKIP_WRITE_BARRIER); | |
112 output->set(SECOND, | |
113 Smi::FromInt(second), | |
114 SKIP_WRITE_BARRIER); | |
115 return true; | 103 return true; |
116 } | 104 } |
117 | 105 |
118 bool DateParser::TimeZoneComposer::Write(FixedArray* output) { | 106 bool DateParser::TimeZoneComposer::Write(FixedArray* output) { |
119 if (sign_ != kNone) { | 107 if (sign_ != kNone) { |
120 if (hour_ == kNone) hour_ = 0; | 108 if (hour_ == kNone) hour_ = 0; |
121 if (minute_ == kNone) minute_ = 0; | 109 if (minute_ == kNone) minute_ = 0; |
122 int total_seconds = sign_ * (hour_ * 3600 + minute_ * 60); | 110 int total_seconds = sign_ * (hour_ * 3600 + minute_ * 60); |
123 if (!Smi::IsValid(total_seconds)) return false; | 111 if (!Smi::IsValid(total_seconds)) return false; |
124 output->set(UTC_OFFSET, | 112 output->set(UTC_OFFSET, Smi::FromInt(total_seconds)); |
125 Smi::FromInt(total_seconds), | |
126 SKIP_WRITE_BARRIER); | |
127 } else { | 113 } else { |
128 output->set(UTC_OFFSET, | 114 output->set_null(UTC_OFFSET); |
129 Heap::null_value(), | |
130 SKIP_WRITE_BARRIER); | |
131 } | 115 } |
132 return true; | 116 return true; |
133 } | 117 } |
134 | 118 |
135 const int8_t DateParser::KeywordTable:: | 119 const int8_t DateParser::KeywordTable:: |
136 array[][DateParser::KeywordTable::kEntrySize] = { | 120 array[][DateParser::KeywordTable::kEntrySize] = { |
137 {'j', 'a', 'n', DateParser::MONTH_NAME, 1}, | 121 {'j', 'a', 'n', DateParser::MONTH_NAME, 1}, |
138 {'f', 'e', 'b', DateParser::MONTH_NAME, 2}, | 122 {'f', 'e', 'b', DateParser::MONTH_NAME, 2}, |
139 {'m', 'a', 'r', DateParser::MONTH_NAME, 3}, | 123 {'m', 'a', 'r', DateParser::MONTH_NAME, 3}, |
140 {'a', 'p', 'r', DateParser::MONTH_NAME, 4}, | 124 {'a', 'p', 'r', DateParser::MONTH_NAME, 4}, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 if (j == kPrefixLength && | 161 if (j == kPrefixLength && |
178 (len <= kPrefixLength || array[i][kTypeOffset] == MONTH_NAME)) { | 162 (len <= kPrefixLength || array[i][kTypeOffset] == MONTH_NAME)) { |
179 return i; | 163 return i; |
180 } | 164 } |
181 } | 165 } |
182 return i; | 166 return i; |
183 } | 167 } |
184 | 168 |
185 | 169 |
186 } } // namespace v8::internal | 170 } } // namespace v8::internal |
OLD | NEW |