Skip to content

Commit 2974deb

Browse files
targosrvagg
authored andcommitted
deps: update V8 to 4.6.85.28
This update fixes a breaking regression in the date parser. Ref: https://code.google.com/p/chromium/issues/detail?id=539813 Ref: https://code.google.com/p/chromium/issues/detail?id=543320 PR-URL: #3484 Reviewed-By: Ben Noordhuis <[email protected]>
1 parent f76af49 commit 2974deb

File tree

8 files changed

+99
-73
lines changed

8 files changed

+99
-73
lines changed

deps/v8/include/v8-version.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#define V8_MAJOR_VERSION 4
1212
#define V8_MINOR_VERSION 6
1313
#define V8_BUILD_NUMBER 85
14-
#define V8_PATCH_LEVEL 25
14+
#define V8_PATCH_LEVEL 28
1515

1616
// Use 1 for candidates and 0 otherwise.
1717
// (Boolean macro values are not supported by all preprocessors.)

deps/v8/src/dateparser-inl.h

+14-10
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ bool DateParser::Parse(Vector<Char> str,
2323
DayComposer day;
2424

2525
// Specification:
26-
// Accept ES6 ISO 8601 date-time-strings or legacy dates compatible
26+
// Accept ES5 ISO 8601 date-time-strings or legacy dates compatible
2727
// with Safari.
28-
// ES6 ISO 8601 dates:
28+
// ES5 ISO 8601 dates:
2929
// [('-'|'+')yy]yyyy[-MM[-DD]][THH:mm[:ss[.sss]][Z|(+|-)hh:mm]]
3030
// where yyyy is in the range 0000..9999 and
3131
// +/-yyyyyy is in the range -999999..+999999 -
@@ -40,7 +40,8 @@ bool DateParser::Parse(Vector<Char> str,
4040
// sss is in the range 000..999,
4141
// hh is in the range 00..23,
4242
// mm, ss, and sss default to 00 if missing, and
43-
// timezone defaults to local time if missing.
43+
// timezone defaults to Z if missing
44+
// (following Safari, ISO actually demands local time).
4445
// Extensions:
4546
// We also allow sss to have more or less than three digits (but at
4647
// least one).
@@ -62,13 +63,15 @@ bool DateParser::Parse(Vector<Char> str,
6263
// is allowed).
6364
// Intersection of the two:
6465
// A string that matches both formats (e.g. 1970-01-01) will be
65-
// parsed as an ES6 date-time string.
66-
// After a valid "T" has been read while scanning an ES6 datetime string,
66+
// parsed as an ES5 date-time string - which means it will default
67+
// to UTC time-zone. That's unavoidable if following the ES5
68+
// specification.
69+
// After a valid "T" has been read while scanning an ES5 datetime string,
6770
// the input can no longer be a valid legacy date, since the "T" is a
6871
// garbage string after a number has been read.
6972

70-
// First try getting as far as possible with as ES6 Date Time String.
71-
DateToken next_unhandled_token = ParseES6DateTime(&scanner, &day, &time, &tz);
73+
// First try getting as far as possible with as ES5 Date Time String.
74+
DateToken next_unhandled_token = ParseES5DateTime(&scanner, &day, &time, &tz);
7275
if (next_unhandled_token.IsInvalid()) return false;
7376
bool has_read_number = !day.IsEmpty();
7477
// If there's anything left, continue with the legacy parser.
@@ -193,7 +196,7 @@ DateParser::DateToken DateParser::DateStringTokenizer<CharType>::Scan() {
193196

194197

195198
template <typename Char>
196-
DateParser::DateToken DateParser::ParseES6DateTime(
199+
DateParser::DateToken DateParser::ParseES5DateTime(
197200
DateStringTokenizer<Char>* scanner,
198201
DayComposer* day,
199202
TimeComposer* time,
@@ -231,7 +234,7 @@ DateParser::DateToken DateParser::ParseES6DateTime(
231234
if (!scanner->Peek().IsKeywordType(TIME_SEPARATOR)) {
232235
if (!scanner->Peek().IsEndOfInput()) return scanner->Next();
233236
} else {
234-
// ES6 Date Time String time part is present.
237+
// ES5 Date Time String time part is present.
235238
scanner->Next();
236239
if (!scanner->Peek().IsFixedLengthNumber(2) ||
237240
!Between(scanner->Peek().number(), 0, 24)) {
@@ -297,7 +300,8 @@ DateParser::DateToken DateParser::ParseES6DateTime(
297300
}
298301
if (!scanner->Peek().IsEndOfInput()) return DateToken::Invalid();
299302
}
300-
// Successfully parsed ES6 Date Time String.
303+
// Successfully parsed ES5 Date Time String. Default to UTC if no TZ given.
304+
if (tz->IsEmpty()) tz->Set(0);
301305
day->set_iso_date();
302306
return DateToken::EndOfInput();
303307
}

deps/v8/src/dateparser.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -368,13 +368,13 @@ class DateParser : public AllStatic {
368368
bool is_iso_date_;
369369
};
370370

371-
// Tries to parse an ES6 Date Time String. Returns the next token
371+
// Tries to parse an ES5 Date Time String. Returns the next token
372372
// to continue with in the legacy date string parser. If parsing is
373373
// complete, returns DateToken::EndOfInput(). If terminally unsuccessful,
374374
// returns DateToken::Invalid(). Otherwise parsing continues in the
375375
// legacy parser.
376376
template <typename Char>
377-
static DateParser::DateToken ParseES6DateTime(
377+
static DateParser::DateToken ParseES5DateTime(
378378
DateStringTokenizer<Char>* scanner,
379379
DayComposer* day,
380380
TimeComposer* time,

deps/v8/test/mjsunit/date-parse.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,9 @@ var testCasesES5Misc = [
245245
['2000-01T08:00:00.099Z', 946713600099],
246246
['2000-01T08:00:00.999Z', 946713600999],
247247
['2000-01T00:00:00.001-08:00', 946713600001],
248-
['2000-01-01T24:00Z', 946771200000],
249-
['2000-01-01T24:00:00Z', 946771200000],
250-
['2000-01-01T24:00:00.000Z', 946771200000],
248+
['2000-01-01T24:00', 946771200000],
249+
['2000-01-01T24:00:00', 946771200000],
250+
['2000-01-01T24:00:00.000', 946771200000],
251251
['2000-01-01T24:00:00.000Z', 946771200000]];
252252

253253
var testCasesES5MiscNegative = [

deps/v8/test/mjsunit/date.js

+54-54
Original file line numberDiff line numberDiff line change
@@ -203,110 +203,110 @@ assertEquals(-8640000000000000, Date.UTC(1970, 0, 1 - 100000001, 24));
203203

204204

205205
// Parsing ES5 ISO-8601 dates.
206-
// When TZ is omitted, it defaults to the local timezone
206+
// When TZ is omitted, it defaults to 'Z' meaning UTC.
207207

208208
// Check epoch.
209209
assertEquals(0, Date.parse("1970-01-01T00:00:00.000+00:00"));
210210
assertEquals(0, Date.parse("1970-01-01T00:00:00.000-00:00"));
211211
assertEquals(0, Date.parse("1970-01-01T00:00:00.000Z"));
212-
assertEquals(0, Date.parse("1970-01-01T00:00:00.000Z"));
213-
assertEquals(0, Date.parse("1970-01-01T00:00:00Z"));
214-
assertEquals(0, Date.parse("1970-01-01T00:00Z"));
215-
assertEquals(0, Date.parse("1970-01-01Z"));
212+
assertEquals(0, Date.parse("1970-01-01T00:00:00.000"));
213+
assertEquals(0, Date.parse("1970-01-01T00:00:00"));
214+
assertEquals(0, Date.parse("1970-01-01T00:00"));
215+
assertEquals(0, Date.parse("1970-01-01"));
216216

217217
assertEquals(0, Date.parse("1970-01T00:00:00.000+00:00"));
218218
assertEquals(0, Date.parse("1970-01T00:00:00.000-00:00"));
219219
assertEquals(0, Date.parse("1970-01T00:00:00.000Z"));
220-
assertEquals(0, Date.parse("1970-01T00:00:00.000Z"));
221-
assertEquals(0, Date.parse("1970-01T00:00:00Z"));
222-
assertEquals(0, Date.parse("1970-01T00:00Z"));
223-
assertEquals(0, Date.parse("1970-01Z"));
220+
assertEquals(0, Date.parse("1970-01T00:00:00.000"));
221+
assertEquals(0, Date.parse("1970-01T00:00:00"));
222+
assertEquals(0, Date.parse("1970-01T00:00"));
223+
assertEquals(0, Date.parse("1970-01"));
224224

225225
assertEquals(0, Date.parse("1970T00:00:00.000+00:00"));
226226
assertEquals(0, Date.parse("1970T00:00:00.000-00:00"));
227227
assertEquals(0, Date.parse("1970T00:00:00.000Z"));
228-
assertEquals(0, Date.parse("1970T00:00:00.000Z"));
229-
assertEquals(0, Date.parse("1970T00:00:00Z"));
230-
assertEquals(0, Date.parse("1970T00:00Z"));
231-
assertEquals(0, Date.parse("1970Z"));
228+
assertEquals(0, Date.parse("1970T00:00:00.000"));
229+
assertEquals(0, Date.parse("1970T00:00:00"));
230+
assertEquals(0, Date.parse("1970T00:00"));
231+
assertEquals(0, Date.parse("1970"));
232232

233233
assertEquals(0, Date.parse("+001970-01-01T00:00:00.000+00:00"));
234234
assertEquals(0, Date.parse("+001970-01-01T00:00:00.000-00:00"));
235235
assertEquals(0, Date.parse("+001970-01-01T00:00:00.000Z"));
236-
assertEquals(0, Date.parse("+001970-01-01T00:00:00.000Z"));
237-
assertEquals(0, Date.parse("+001970-01-01T00:00:00Z"));
238-
assertEquals(0, Date.parse("+001970-01-01T00:00Z"));
239-
assertEquals(0, Date.parse("+001970-01-01Z"));
236+
assertEquals(0, Date.parse("+001970-01-01T00:00:00.000"));
237+
assertEquals(0, Date.parse("+001970-01-01T00:00:00"));
238+
assertEquals(0, Date.parse("+001970-01-01T00:00"));
239+
assertEquals(0, Date.parse("+001970-01-01"));
240240

241241
assertEquals(0, Date.parse("+001970-01T00:00:00.000+00:00"));
242242
assertEquals(0, Date.parse("+001970-01T00:00:00.000-00:00"));
243243
assertEquals(0, Date.parse("+001970-01T00:00:00.000Z"));
244-
assertEquals(0, Date.parse("+001970-01T00:00:00.000Z"));
245-
assertEquals(0, Date.parse("+001970-01T00:00:00Z"));
246-
assertEquals(0, Date.parse("+001970-01T00:00Z"));
247-
assertEquals(0, Date.parse("+001970-01Z"));
244+
assertEquals(0, Date.parse("+001970-01T00:00:00.000"));
245+
assertEquals(0, Date.parse("+001970-01T00:00:00"));
246+
assertEquals(0, Date.parse("+001970-01T00:00"));
247+
assertEquals(0, Date.parse("+001970-01"));
248248

249249
assertEquals(0, Date.parse("+001970T00:00:00.000+00:00"));
250250
assertEquals(0, Date.parse("+001970T00:00:00.000-00:00"));
251251
assertEquals(0, Date.parse("+001970T00:00:00.000Z"));
252-
assertEquals(0, Date.parse("+001970T00:00:00.000Z"));
253-
assertEquals(0, Date.parse("+001970T00:00:00Z"));
254-
assertEquals(0, Date.parse("+001970T00:00Z"));
255-
assertEquals(0, Date.parse("+001970Z"));
252+
assertEquals(0, Date.parse("+001970T00:00:00.000"));
253+
assertEquals(0, Date.parse("+001970T00:00:00"));
254+
assertEquals(0, Date.parse("+001970T00:00"));
255+
assertEquals(0, Date.parse("+001970"));
256256

257257
// Check random date.
258258
assertEquals(70671003500, Date.parse("1972-03-28T23:50:03.500+01:00"));
259259
assertEquals(70674603500, Date.parse("1972-03-28T23:50:03.500Z"));
260-
assertEquals(70674603500, Date.parse("1972-03-28T23:50:03.500Z"));
261-
assertEquals(70674603000, Date.parse("1972-03-28T23:50:03Z"));
262-
assertEquals(70674600000, Date.parse("1972-03-28T23:50Z"));
263-
assertEquals(70588800000, Date.parse("1972-03-28Z"));
260+
assertEquals(70674603500, Date.parse("1972-03-28T23:50:03.500"));
261+
assertEquals(70674603000, Date.parse("1972-03-28T23:50:03"));
262+
assertEquals(70674600000, Date.parse("1972-03-28T23:50"));
263+
assertEquals(70588800000, Date.parse("1972-03-28"));
264264

265265
assertEquals(68338203500, Date.parse("1972-03T23:50:03.500+01:00"));
266266
assertEquals(68341803500, Date.parse("1972-03T23:50:03.500Z"));
267-
assertEquals(68341803500, Date.parse("1972-03T23:50:03.500Z"));
268-
assertEquals(68341803000, Date.parse("1972-03T23:50:03Z"));
269-
assertEquals(68341800000, Date.parse("1972-03T23:50Z"));
270-
assertEquals(68256000000, Date.parse("1972-03Z"));
267+
assertEquals(68341803500, Date.parse("1972-03T23:50:03.500"));
268+
assertEquals(68341803000, Date.parse("1972-03T23:50:03"));
269+
assertEquals(68341800000, Date.parse("1972-03T23:50"));
270+
assertEquals(68256000000, Date.parse("1972-03"));
271271

272272
assertEquals(63154203500, Date.parse("1972T23:50:03.500+01:00"));
273273
assertEquals(63157803500, Date.parse("1972T23:50:03.500Z"));
274-
assertEquals(63157803500, Date.parse("1972T23:50:03.500Z"));
275-
assertEquals(63157803000, Date.parse("1972T23:50:03Z"));
276-
assertEquals(63072000000, Date.parse("1972Z"));
274+
assertEquals(63157803500, Date.parse("1972T23:50:03.500"));
275+
assertEquals(63157803000, Date.parse("1972T23:50:03"));
276+
assertEquals(63072000000, Date.parse("1972"));
277277

278278
assertEquals(70671003500, Date.parse("+001972-03-28T23:50:03.500+01:00"));
279279
assertEquals(70674603500, Date.parse("+001972-03-28T23:50:03.500Z"));
280-
assertEquals(70674603500, Date.parse("+001972-03-28T23:50:03.500Z"));
281-
assertEquals(70674603000, Date.parse("+001972-03-28T23:50:03Z"));
282-
assertEquals(70674600000, Date.parse("+001972-03-28T23:50Z"));
283-
assertEquals(70588800000, Date.parse("+001972-03-28Z"));
280+
assertEquals(70674603500, Date.parse("+001972-03-28T23:50:03.500"));
281+
assertEquals(70674603000, Date.parse("+001972-03-28T23:50:03"));
282+
assertEquals(70674600000, Date.parse("+001972-03-28T23:50"));
283+
assertEquals(70588800000, Date.parse("+001972-03-28"));
284284

285285
assertEquals(68338203500, Date.parse("+001972-03T23:50:03.500+01:00"));
286286
assertEquals(68341803500, Date.parse("+001972-03T23:50:03.500Z"));
287-
assertEquals(68341803500, Date.parse("+001972-03T23:50:03.500Z"));
288-
assertEquals(68341803000, Date.parse("+001972-03T23:50:03Z"));
289-
assertEquals(68341800000, Date.parse("+001972-03T23:50Z"));
290-
assertEquals(68256000000, Date.parse("+001972-03Z"));
287+
assertEquals(68341803500, Date.parse("+001972-03T23:50:03.500"));
288+
assertEquals(68341803000, Date.parse("+001972-03T23:50:03"));
289+
assertEquals(68341800000, Date.parse("+001972-03T23:50"));
290+
assertEquals(68256000000, Date.parse("+001972-03"));
291291

292292
assertEquals(63154203500, Date.parse("+001972T23:50:03.500+01:00"));
293293
assertEquals(63157803500, Date.parse("+001972T23:50:03.500Z"));
294-
assertEquals(63157803500, Date.parse("+001972T23:50:03.500Z"));
295-
assertEquals(63157803000, Date.parse("+001972T23:50:03Z"));
296-
assertEquals(63072000000, Date.parse("+001972Z"));
294+
assertEquals(63157803500, Date.parse("+001972T23:50:03.500"));
295+
assertEquals(63157803000, Date.parse("+001972T23:50:03"));
296+
assertEquals(63072000000, Date.parse("+001972"));
297297

298298

299299
// Ensure that ISO-years in the range 00-99 aren't translated to the range
300300
// 1950..2049.
301-
assertEquals(-60904915200000, Date.parse("0040-01-01T00:00Z"));
302-
assertEquals(-60273763200000, Date.parse("0060-01-01T00:00Z"));
303-
assertEquals(-62167219200000, Date.parse("0000-01-01T00:00Z"));
304-
assertEquals(-62167219200000, Date.parse("+000000-01-01T00:00Z"));
301+
assertEquals(-60904915200000, Date.parse("0040-01-01"));
302+
assertEquals(-60273763200000, Date.parse("0060-01-01"));
303+
assertEquals(-62167219200000, Date.parse("0000-01-01"));
304+
assertEquals(-62167219200000, Date.parse("+000000-01-01"));
305305

306306
// Test negative years.
307-
assertEquals(-63429523200000, Date.parse("-000040-01-01Z"));
308-
assertEquals(-64060675200000, Date.parse("-000060-01-01Z"));
309-
assertEquals(-124397510400000, Date.parse("-001972-01-01Z"));
307+
assertEquals(-63429523200000, Date.parse("-000040-01-01"));
308+
assertEquals(-64060675200000, Date.parse("-000060-01-01"));
309+
assertEquals(-124397510400000, Date.parse("-001972-01-01"));
310310

311311
// Check time-zones.
312312
assertEquals(70674603500, Date.parse("1972-03-28T23:50:03.500Z"));

deps/v8/test/test262-es6/test262-es6.status

+3
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,9 @@
295295
'built-ins/Symbol/species/builtin-getter-name': [FAIL],
296296
'built-ins/Symbol/species/subclassing': [FAIL],
297297

298+
# https://code.google.com/p/v8/issues/detail?id=4242
299+
'built-ins/Date/15.9.1.15-1': [FAIL],
300+
298301
# https://code.google.com/p/v8/issues/detail?id=4004
299302
'built-ins/Date/prototype/setFullYear/15.9.5.40_1': [FAIL],
300303

deps/v8/test/test262/test262.status

-3
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,6 @@
281281
'15.2.3.13-1-3': [FAIL],
282282
'15.2.3.13-1-4': [FAIL],
283283

284-
# ES6 says for dates to default to the local timezone if none is specified
285-
'15.9.1.15-1': [FAIL],
286-
287284
######################## NEEDS INVESTIGATION ###########################
288285

289286
# These test failures are specific to the intl402 suite and need investigation

deps/v8/tools/run-tests.py

+22
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,15 @@
5757
# expected runtimes (suites with slow test cases first). These groups are
5858
# invoked in seperate steps on the bots.
5959
TEST_MAP = {
60+
"bot_default": [
61+
"mjsunit",
62+
"cctest",
63+
"webkit",
64+
"message",
65+
"preparser",
66+
"intl",
67+
"unittests",
68+
],
6069
"default": [
6170
"mjsunit",
6271
"cctest",
@@ -80,6 +89,10 @@
8089

8190
VARIANTS = ["default", "stress", "turbofan", "nocrankshaft"]
8291

92+
EXHAUSTIVE_VARIANTS = VARIANTS + [
93+
# TODO(machenbach): Add always opt turbo variant.
94+
]
95+
8396
DEBUG_FLAGS = ["--nohard-abort", "--nodead-code-elimination",
8497
"--nofold-constants", "--enable-slow-asserts",
8598
"--debug-code", "--verify-heap"]
@@ -250,6 +263,9 @@ def BuildOptions():
250263
default=False, dest="no_variants", action="store_true")
251264
result.add_option("--variants",
252265
help="Comma-separated list of testing variants: %s" % VARIANTS)
266+
result.add_option("--exhaustive-variants",
267+
default=False, action="store_true",
268+
help="Use exhaustive set of default variants.")
253269
result.add_option("--outdir", help="Base directory with compile output",
254270
default="out")
255271
result.add_option("--predictable",
@@ -334,6 +350,7 @@ def BuildbotToV8Mode(config):
334350

335351
def ProcessOptions(options):
336352
global ALL_VARIANTS
353+
global EXHAUSTIVE_VARIANTS
337354
global VARIANTS
338355

339356
# Architecture and mode related stuff.
@@ -385,6 +402,11 @@ def ProcessOptions(options):
385402
if options.novfp3:
386403
options.extra_flags.append("--noenable-vfp3")
387404

405+
if options.exhaustive_variants:
406+
# This is used on many bots. It includes a larger set of default variants.
407+
# Other options for manipulating variants still apply afterwards.
408+
VARIANTS = EXHAUSTIVE_VARIANTS
409+
388410
if options.msan:
389411
VARIANTS = ["default"]
390412

0 commit comments

Comments
 (0)