diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-07-05 11:41:56 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-07-05 11:41:56 -0700 |
commit | 6054dcc1302d1a1ef51e215dcf1ad16fb967f1ba (patch) | |
tree | bfdb8d58cdbe55de1e1e05a8331b0a1623f9aaa5 /deps/v8/src/dateparser.cc | |
parent | 33af2720f26c2b25bc7f75ce7eb454ff99db6d35 (diff) | |
download | android-node-v8-6054dcc1302d1a1ef51e215dcf1ad16fb967f1ba.tar.gz android-node-v8-6054dcc1302d1a1ef51e215dcf1ad16fb967f1ba.tar.bz2 android-node-v8-6054dcc1302d1a1ef51e215dcf1ad16fb967f1ba.zip |
Upgrade V8 to 3.4.9
Diffstat (limited to 'deps/v8/src/dateparser.cc')
-rw-r--r-- | deps/v8/src/dateparser.cc | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/deps/v8/src/dateparser.cc b/deps/v8/src/dateparser.cc index 6d8048876f..4a0721fe83 100644 --- a/deps/v8/src/dateparser.cc +++ b/deps/v8/src/dateparser.cc @@ -1,4 +1,4 @@ -// Copyright 2008 the V8 project authors. All rights reserved. +// Copyright 2011 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: @@ -44,7 +44,7 @@ bool DateParser::DayComposer::Write(FixedArray* output) { int day = kNone; if (named_month_ == kNone) { - if (index_ == 3 && !IsDay(comp_[0])) { + if (is_iso_date_ || (index_ == 3 && !IsDay(comp_[0]))) { // YMD year = comp_[0]; month = comp_[1]; @@ -71,8 +71,10 @@ bool DateParser::DayComposer::Write(FixedArray* output) { } } - if (Between(year, 0, 49)) year += 2000; - else if (Between(year, 50, 99)) year += 1900; + if (!is_iso_date_) { + if (Between(year, 0, 49)) year += 2000; + else if (Between(year, 50, 99)) year += 1900; + } if (!Smi::IsValid(year) || !IsMonth(month) || !IsDay(day)) return false; @@ -151,6 +153,7 @@ const int8_t DateParser::KeywordTable:: {'m', 's', 't', DateParser::TIME_ZONE_NAME, -7}, {'p', 'd', 't', DateParser::TIME_ZONE_NAME, -7}, {'p', 's', 't', DateParser::TIME_ZONE_NAME, -8}, + {'t', '\0', '\0', DateParser::TIME_SEPARATOR, 0}, {'\0', '\0', '\0', DateParser::INVALID, 0}, }; @@ -175,4 +178,35 @@ int DateParser::KeywordTable::Lookup(const uint32_t* pre, int len) { } +int DateParser::ReadMilliseconds(DateToken token) { + // Read first three significant digits of the original numeral, + // as inferred from the value and the number of digits. + // I.e., use the number of digits to see if there were + // leading zeros. + int number = token.number(); + int length = token.length(); + if (length < 3) { + // Less than three digits. Multiply to put most significant digit + // in hundreds position. + if (length == 1) { + number *= 100; + } else if (length == 2) { + number *= 10; + } + } else if (length > 3) { + if (length > kMaxSignificantDigits) length = kMaxSignificantDigits; + // More than three digits. Divide by 10^(length - 3) to get three + // most significant digits. + int factor = 1; + do { + ASSERT(factor <= 100000000); // factor won't overflow. + factor *= 10; + length--; + } while (length > 3); + number /= factor; + } + return number; +} + + } } // namespace v8::internal |