Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 35b0cc8

Browse files
author
Dart CI
committed
Version 2.19.0-372.0.dev
Merge b597b75 into dev
2 parents 9a3eac0 + b597b75 commit 35b0cc8

File tree

85 files changed

+1314
-597
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+1314
-597
lines changed

DEPS

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ vars = {
100100
"boringssl_gen_rev": "ced85ef0a00bbca77ce5a91261a5f2ae61b1e62f",
101101
"boringssl_rev": "87f316d7748268eb56f2dc147bd593254ae93198",
102102
"browser-compat-data_tag": "ac8cae697014da1ff7124fba33b0b4245cc6cd1b", # v1.0.22
103-
"browser_launcher_rev": "981ca8847dd2b0fe022f9e742045cfb8f214d35f",
103+
"browser_launcher_rev": "5fa0bd6cddc33785f43c920576fc03dcee1c3caa",
104104
"characters_rev": "559755d67af2c78b9beaaeb7ca57d7c4ae0b836d",
105105
"chrome_rev": "19997",
106106
"cli_util_rev": "b0adbba89442b2ea6fef39c7a82fe79cb31e1168",
@@ -122,7 +122,7 @@ vars = {
122122
# For more details, see https://github.com/dart-lang/sdk/issues/30164.
123123
"dart_style_rev": "f79a9828ad07e50d6e8352ac154cc16eb4d78d5c", # manually rev'd
124124

125-
"dartdoc_rev": "3273437229b89289534edd3b15934ac75921fa6b",
125+
"dartdoc_rev": "179ada02c1bf8e0d69c3255c49742c7513e33f6f",
126126
"devtools_rev": "23444af89d716818f099974df3e4fffac87fd886",
127127
"ffi_rev": "fb5f2667826c0900e551d19101052f84e35f41bf",
128128
"file_rev": "b2e31cb6ef40b223701dbfa0b907fe58468484d7",
@@ -131,7 +131,7 @@ vars = {
131131
"html_rev": "0bf601959ac98e6cdf1925a1cdab70bd6a5ddc45",
132132
"http_multi_server_rev": "20bf079c8955d1250a45afb9cb096472a724a551",
133133
"http_parser_rev": "c73967535ce31120e218120f70ef98cc22688c82",
134-
"http_rev": "738a55b20e391c5a526b86bf4b02af6b7745b494",
134+
"http_rev": "63390263e230bbd0aa2dae286fd7a64098e09029",
135135
"icu_rev": "81d656878ec611cb0b42d52c82e9dae93920d9ba",
136136
"intl_rev": "dda8ade30e8865843c6650a20a18bbf94387adee",
137137
"jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
@@ -142,7 +142,7 @@ vars = {
142142
"markdown_rev": "f3873403f5b1a0319f78632a8fbc2b22315a7b83", # b/256680494
143143
"markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
144144
"matcher_rev": "6a9b83bbd73e50df2058b3e8e4aa301df49569c6",
145-
"mime_rev": "bf041aa372a27aae6f94e185aa0af3932b9de98b",
145+
"mime_rev": "d80f4d09067af87d84d9cb647acfa4d2d313d795",
146146
"mockito_rev": "094d07cdceca1f9f4ef863fb57045295298e8682",
147147
"oauth2_rev": "ee5c9b1ef5bfcd282c0637f319155f89634385ed",
148148
"package_config_rev": "cff98c90acc457a3b0750f0a7da0e351a35e5d0c",
@@ -160,21 +160,21 @@ vars = {
160160
"sse_rev": "283568dd4865cc51e25370ed107fcbdb68759c22",
161161
"stack_trace_rev": "dce00134f6558086e8963e37d0b1ba0830862c01",
162162
"stream_channel_rev": "a5129ca44322a7024074ca38fb98e343dcb638c7",
163-
"string_scanner_rev": "10435a4f468e480273f78a6cfa1615c82446ef47",
163+
"string_scanner_rev": "4a5cbc5c1127151ea507cc9da797b829857607e8",
164164
"sync_http_rev": "f5c1f18f579752112870fa2f1860470d28c6f605",
165165
"term_glyph_rev": "ec7cf7bb51ebb7d55760a1359f6697690dbc06ba",
166166
"test_descriptor_rev": "66f14ce9159f425da000ad105e0b890fe396c2b7",
167-
"test_process_rev": "068f9f83180014dd587a20af0caa9b2c22431141",
167+
"test_process_rev": "1774aa7a94ebbc60924a7f7174adb02e84458c25",
168168
"test_reflective_loader_rev": "ef934b7a894d78601ba67d8f6207bd4505690456",
169-
"test_rev": "b82fc0b5c11fcfe4e636caef6b869f1a8cd4a803",
169+
"test_rev": "173a36f2cd4fbf1b2309a87722664d802c74009b",
170170
"typed_data_rev": "6369490ede1c87a4a5758304a606a6e4eee364b9",
171171
"usage_rev": "fee1d9d9c295362f6edebfeebb9f8187711c55ab",
172172
"vector_math_rev": "1eee95b15e5d35cf519514cc253037b19705fb7a",
173173
"watcher_rev": "32591071a83f632478e702f67e29de6e54428ce9",
174174
"web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
175175
"web_socket_channel_rev": "eba15419e51836a67fee18d1b7fd1b875d890bc3",
176176
"WebCore_rev": "bcb10901266c884e7b3740abc597ab95373ab55c",
177-
"webdev_rev": "c350055204b37a7fb287ae5ce63c2b8f932e53d9",
177+
"webdev_rev": "069b87091b0cd25ae1a5e5927cdf6a475fda5bf7",
178178
"webdriver_rev": "c28cf51fcd0bd306a11fa7d10743b8fe7434ea71",
179179
"webkit_inspection_protocol_rev": "b825c8f6a12200d619729903207ac826cce278da",
180180
"yaml_edit_rev": "01589b3ce447b03aed991db49f1ec6445ad5476d",

pkg/_fe_analyzer_shared/test/mini_ast.dart

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,6 @@ Statement do_(List<Statement> body, Expression condition) {
122122
Expression expr(String typeStr) =>
123123
new _PlaceholderExpression(new Type(typeStr), location: computeLocation());
124124

125-
/// Creates a pseudo-expression having type [type] that otherwise has no
126-
/// effect on flow analysis.
127-
Expression expr2(Type type) =>
128-
new _PlaceholderExpression(type, location: computeLocation());
129-
130125
/// Creates a conventional `for` statement. Optional boolean [forCollection]
131126
/// indicates that this `for` statement is actually a collection element, so
132127
/// `null` should be passed to [for_bodyBegin].
@@ -2711,7 +2706,7 @@ class _MiniAstTypeAnalyzer
27112706
named: type.named.map((namedType) {
27122707
return shared.NamedType(
27132708
namedType.name,
2714-
namedType.innerType,
2709+
namedType.type,
27152710
);
27162711
}).toList(),
27172712
);

pkg/_fe_analyzer_shared/test/mini_types.dart

Lines changed: 92 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,14 @@ class FunctionType extends Type {
4444
}
4545
}
4646

47-
class NamedType extends Type {
47+
class NamedType {
4848
final String name;
49-
final Type innerType;
50-
51-
NamedType(this.name, this.innerType) : super._();
49+
final Type type;
5250

53-
@override
54-
NamedType? recursivelyDemote({required bool covariant}) {
55-
Type? newInnerType = innerType.recursivelyDemote(covariant: covariant);
56-
if (newInnerType == null) return null;
57-
return NamedType(name, newInnerType);
58-
}
51+
NamedType(this.name, this.type);
5952

6053
@override
61-
String _toString({required bool allowSuffixes}) {
62-
return '$innerType $name';
63-
}
54+
String toString() => '$type $name';
6455
}
6556

6657
/// Representation of a "simple" type suitable for unit testing of code in the
@@ -94,6 +85,16 @@ class NonFunctionType extends Type {
9485
}
9586
}
9687

88+
/// Exception thrown if a type fails to parse properly.
89+
class ParseError extends Error {
90+
final String message;
91+
92+
ParseError(this.message);
93+
94+
@override
95+
String toString() => message;
96+
}
97+
9798
/// Representation of a promoted type parameter type suitable for unit testing
9899
/// of code in the `_fe_analyzer_shared` package. A promoted type parameter is
99100
/// often written using the syntax `a&b`, where `a` is the type parameter and
@@ -169,10 +170,10 @@ class RecordType extends Type {
169170

170171
List<NamedType>? newNamed;
171172
for (var i = 0; i < named.length; i++) {
172-
var newType = named[i].recursivelyDemote(covariant: covariant);
173+
var newType = named[i].type.recursivelyDemote(covariant: covariant);
173174
if (newType != null) {
174175
newNamed ??= named.toList();
175-
newNamed[i] = newType;
176+
newNamed[i] = NamedType(named[i].name, newType);
176177
}
177178
}
178179

@@ -308,7 +309,7 @@ class UnknownType extends Type {
308309

309310
class _TypeParser {
310311
static final _typeTokenizationRegexp =
311-
RegExp(_identifierPattern + r'|\(|\)|<|>|,|\?|\*|&');
312+
RegExp(_identifierPattern + r'|\(|\)|<|>|,|\?|\*|&|{|}');
312313

313314
static const _identifierPattern = '[_a-zA-Z][_a-zA-Z0-9]*';
314315

@@ -329,7 +330,61 @@ class _TypeParser {
329330
}
330331

331332
Never _parseFailure(String message) {
332-
fail('Error parsing type `$_typeStr` at token $_currentToken: $message');
333+
throw ParseError(
334+
'Error parsing type `$_typeStr` at token $_currentToken: $message');
335+
}
336+
337+
List<NamedType> _parseRecordTypeNamedFields() {
338+
assert(_currentToken == '{');
339+
_next();
340+
var namedTypes = <NamedType>[];
341+
while (_currentToken != '}') {
342+
var type = _parseType();
343+
var name = _currentToken;
344+
if (_identifierRegexp.matchAsPrefix(name) == null) {
345+
_parseFailure('Expected an identifier');
346+
}
347+
namedTypes.add(NamedType(name, type));
348+
_next();
349+
if (_currentToken == ',') {
350+
_next();
351+
continue;
352+
}
353+
if (_currentToken == '}') {
354+
break;
355+
}
356+
_parseFailure('Expected `}` or `,`');
357+
}
358+
if (namedTypes.isEmpty) {
359+
_parseFailure('Must have at least one named type between {}');
360+
}
361+
_next();
362+
return namedTypes;
363+
}
364+
365+
Type _parseRecordTypeRest(List<Type> positionalTypes) {
366+
List<NamedType>? namedTypes;
367+
while (_currentToken != ')') {
368+
if (_currentToken == '{') {
369+
namedTypes = _parseRecordTypeNamedFields();
370+
if (_currentToken != ')') {
371+
_parseFailure('Expected `)`');
372+
}
373+
break;
374+
}
375+
positionalTypes.add(_parseType());
376+
if (_currentToken == ',') {
377+
_next();
378+
continue;
379+
}
380+
if (_currentToken == ')') {
381+
break;
382+
}
383+
_parseFailure('Expected `)` or `,`');
384+
}
385+
_next();
386+
return RecordType(
387+
positional: positionalTypes, named: namedTypes ?? const []);
333388
}
334389

335390
Type? _parseSuffix(Type type) {
@@ -373,6 +428,13 @@ class _TypeParser {
373428
// unsuffixedType := identifier typeArgs?
374429
// | `?`
375430
// | `(` type `)`
431+
// | `(` recordTypeFields `,` recordTypeNamedFields `)`
432+
// | `(` recordTypeFields `,`? `)`
433+
// | `(` recordTypeNamedFields? `)`
434+
// recordTypeFields := type (`,` type)*
435+
// recordTypeNamedFields := `{` recordTypeNamedField
436+
// (`,` recordTypeNamedField)* `,`? `}`
437+
// recordTypeNamedField := type identifier
376438
// typeArgs := `<` type (`,` type)* `>`
377439
// nullability := (`?` | `*`)?
378440
// suffix := `Function` `(` type (`,` type)* `)`
@@ -396,9 +458,16 @@ class _TypeParser {
396458
}
397459
if (_currentToken == '(') {
398460
_next();
461+
if (_currentToken == ')' || _currentToken == '{') {
462+
return _parseRecordTypeRest([]);
463+
}
399464
var type = _parseType();
465+
if (_currentToken == ',') {
466+
_next();
467+
return _parseRecordTypeRest([type]);
468+
}
400469
if (_currentToken != ')') {
401-
_parseFailure('Expected `)`');
470+
_parseFailure('Expected `)` or `,`');
402471
}
403472
_next();
404473
return type;
@@ -431,7 +500,7 @@ class _TypeParser {
431500
var parser = _TypeParser._(typeStr, _tokenizeTypeStr(typeStr));
432501
var result = parser._parseType();
433502
if (parser._currentToken != '<END>') {
434-
fail('Extra tokens after parsing type `$typeStr`: '
503+
throw ParseError('Extra tokens after parsing type `$typeStr`: '
435504
'${parser._tokens.sublist(parser._i, parser._tokens.length - 1)}');
436505
}
437506
return result;
@@ -443,14 +512,16 @@ class _TypeParser {
443512
for (var match in _typeTokenizationRegexp.allMatches(typeStr)) {
444513
var extraChars = typeStr.substring(lastMatchEnd, match.start).trim();
445514
if (extraChars.isNotEmpty) {
446-
fail('Unrecognized character(s) in type `$typeStr`: $extraChars');
515+
throw ParseError(
516+
'Unrecognized character(s) in type `$typeStr`: $extraChars');
447517
}
448518
result.add(typeStr.substring(match.start, match.end));
449519
lastMatchEnd = match.end;
450520
}
451521
var extraChars = typeStr.substring(lastMatchEnd).trim();
452522
if (extraChars.isNotEmpty) {
453-
fail('Unrecognized character(s) in type `$typeStr`: $extraChars');
523+
throw ParseError(
524+
'Unrecognized character(s) in type `$typeStr`: $extraChars');
454525
}
455526
result.add('<END>');
456527
return result;

0 commit comments

Comments
 (0)