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

Commit d517acc

Browse files
author
Dart CI
committed
Version 2.19.0-339.0.dev
Merge 9896f1c into dev
2 parents 11d520d + 9896f1c commit d517acc

File tree

60 files changed

+2346
-661
lines changed

Some content is hidden

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

60 files changed

+2346
-661
lines changed

CHANGELOG.md

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@
5454
[#49687]: https://github.com/dart-lang/sdk/issues/49687
5555
[#2020]: https://github.com/dart-lang/language/issues/2020
5656

57+
- Add support for **unnamed libraries**. Dart language 2.19 allows a library
58+
directive to be written without a name (`library;`). A library directive can
59+
be used for library-level annotations (such as `@deprecated`) and for
60+
library-level documentation comments, and with this new feature, you don't
61+
have to provide a unique name for each library directive. Instead, a name can
62+
simply be omitted.
63+
5764
### Libraries
5865

5966
#### `dart:core`
@@ -139,15 +146,20 @@
139146

140147
#### Analyzer
141148

142-
- added static enforcement of new `mustBeOverridden` annotation
143-
- added quick fixes for diagnostics:
149+
- add static enforcement of new `mustBeOverridden` annotation
150+
- add quick fixes for diagnostics:
144151
`abstract_field_initializer`,
145152
`ambiguous_extension_member_access`,
153+
`argument_type_not_assignable`,
146154
`assert_in_redirecting_constructor`,
155+
`combinators_ordering`,
147156
`default_value_on_required_parameter`,
148157
`initializing_formal_for_non_existent_field`,
158+
`missing_default_value_for_parameter_positional`,
149159
`super_formal_parameter_without_associated_named`,
150-
- added new Hint: `cast_from_null_always_fails`
160+
`undefined_identifier`
161+
- add new hints: `cast_from_null_always_fails`, `duplicate_export`
162+
- remove hint: `invalid_override_different_default_values`
151163

152164
#### Linter
153165

DEPS

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ vars = {
9696
"async_rev": "18a780efd914c3d848ddc1af5f6c83903a8b2d2d",
9797
"bazel_worker_rev": "03717ca4c2bbf1d74f26c89673426e076288242a",
9898
"benchmark_harness_rev": "6a116758f2b96e92659194bcda990f42106a01d3",
99-
"boolean_selector_rev": "1d3565e2651d16566bb556955b96ea75018cbd0c",
99+
"boolean_selector_rev": "ea0ad2775cc682078571997f6c0512c384ac30f0",
100100
"boringssl_gen_rev": "ced85ef0a00bbca77ce5a91261a5f2ae61b1e62f",
101101
"boringssl_rev": "87f316d7748268eb56f2dc147bd593254ae93198",
102102
"browser-compat-data_tag": "ac8cae697014da1ff7124fba33b0b4245cc6cd1b", # v1.0.22
@@ -122,12 +122,12 @@ 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": "51464a30fad5ff38f52f60602c0f02ff205edd0c",
125+
"dartdoc_rev": "8878245e0766bc943955e3e3883832251e48d95d",
126126
"devtools_rev": "b21cd59f1f6bb60cacd59ba39e376d2a50d82f74",
127127
"ffi_rev": "fb5f2667826c0900e551d19101052f84e35f41bf",
128128
"file_rev": "b2e31cb6ef40b223701dbfa0b907fe58468484d7",
129129
"fixnum_rev": "e0b17cc1f639c55a9c24947392c64b5a68992535",
130-
"glob_rev": "ee812790f4d98587a363e65d5af484ed9c6943f8",
130+
"glob_rev": "073007c5d00822a0ddc964c027785d1eb5559d68",
131131
"html_rev": "0bf601959ac98e6cdf1925a1cdab70bd6a5ddc45",
132132
"http_multi_server_rev": "20bf079c8955d1250a45afb9cb096472a724a551",
133133
"http_parser_rev": "c73967535ce31120e218120f70ef98cc22688c82",
@@ -144,7 +144,7 @@ vars = {
144144
"matcher_rev": "6a9b83bbd73e50df2058b3e8e4aa301df49569c6",
145145
"mime_rev": "bf041aa372a27aae6f94e185aa0af3932b9de98b",
146146
"mockito_rev": "02ad6c793d9ea970b5cc892f45a55d12d8ebf4e8",
147-
"oauth2_rev": "199ebf15cbd5b07958438184f32e41c4447a57bf",
147+
"oauth2_rev": "ee5c9b1ef5bfcd282c0637f319155f89634385ed",
148148
"package_config_rev": "cff98c90acc457a3b0750f0a7da0e351a35e5d0c",
149149
"path_rev": "9955b27b9bb98d87591208e19eb01c51d29fd467",
150150
"ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:benchmark_harness/benchmark_harness.dart';
6+
7+
// Micro-benchmark for multiple returns.
8+
//
9+
// The goal of this benchmark is to compare and track performance of
10+
// various ways to return multiple values from a method.
11+
12+
int input1 = int.parse('42');
13+
String input2 = input1.toString();
14+
15+
const int N = 1000000;
16+
final int expectedSum = (input1 + input2.length) * N;
17+
18+
class ResultClass {
19+
final int result0;
20+
final String result1;
21+
const ResultClass(this.result0, this.result1);
22+
}
23+
24+
@pragma('vm:prefer-inline')
25+
@pragma('dart2js:prefer-inline')
26+
List<Object> inlinedList() => [input1, input2];
27+
28+
@pragma('vm:never-inline')
29+
@pragma('dart2js:never-inline')
30+
List<Object> notInlinedList() => [input1, input2];
31+
32+
@pragma('vm:never-inline')
33+
@pragma('dart2js:never-inline')
34+
List<Object> forwardedList() => notInlinedList();
35+
36+
@pragma('vm:prefer-inline')
37+
@pragma('dart2js:prefer-inline')
38+
ResultClass inlinedClass() => ResultClass(input1, input2);
39+
40+
@pragma('vm:never-inline')
41+
@pragma('dart2js:never-inline')
42+
ResultClass notInlinedClass() => ResultClass(input1, input2);
43+
44+
@pragma('vm:never-inline')
45+
@pragma('dart2js:never-inline')
46+
ResultClass forwardedClass() => notInlinedClass();
47+
48+
@pragma('vm:prefer-inline')
49+
@pragma('dart2js:prefer-inline')
50+
(int, String) inlinedRecord() => (input1, input2);
51+
52+
@pragma('vm:never-inline')
53+
@pragma('dart2js:never-inline')
54+
(int, String) notInlinedRecord() => (input1, input2);
55+
56+
@pragma('vm:never-inline')
57+
@pragma('dart2js:never-inline')
58+
(int, String) forwardedRecord() => notInlinedRecord();
59+
60+
@pragma('vm:prefer-inline')
61+
@pragma('dart2js:prefer-inline')
62+
({int result0, String result1}) inlinedRecordNamed() => (result0: input1, result1: input2);
63+
64+
@pragma('vm:never-inline')
65+
@pragma('dart2js:never-inline')
66+
({int result0, String result1}) notInlinedRecordNamed() => (result0: input1, result1: input2);
67+
68+
@pragma('vm:never-inline')
69+
@pragma('dart2js:never-inline')
70+
({int result0, String result1}) forwardedRecordNamed() => notInlinedRecordNamed();
71+
72+
class BenchInlinedList extends BenchmarkBase {
73+
BenchInlinedList() : super('MultipleReturns.Inlined.List');
74+
75+
@override
76+
void run() {
77+
int sum = 0;
78+
for (int i = 0; i < N; ++i) {
79+
final result = inlinedList();
80+
final int r0 = result[0] as int;
81+
final String r1 = result[1] as String;
82+
sum += r0 + r1.length;
83+
}
84+
if (sum != expectedSum) throw 'Bad result: $sum';
85+
}
86+
}
87+
88+
class BenchNotInlinedList extends BenchmarkBase {
89+
BenchNotInlinedList() : super('MultipleReturns.NotInlined.List');
90+
91+
@override
92+
void run() {
93+
int sum = 0;
94+
for (int i = 0; i < N; ++i) {
95+
final result = notInlinedList();
96+
final int r0 = result[0] as int;
97+
final String r1 = result[1] as String;
98+
sum += r0 + r1.length;
99+
}
100+
if (sum != expectedSum) throw 'Bad result: $sum';
101+
}
102+
}
103+
104+
class BenchForwardedList extends BenchmarkBase {
105+
BenchForwardedList() : super('MultipleReturns.Forwarded.List');
106+
107+
@override
108+
void run() {
109+
int sum = 0;
110+
for (int i = 0; i < N; ++i) {
111+
final result = forwardedList();
112+
final int r0 = result[0] as int;
113+
final String r1 = result[1] as String;
114+
sum += r0 + r1.length;
115+
}
116+
if (sum != expectedSum) throw 'Bad result: $sum';
117+
}
118+
}
119+
120+
class BenchInlinedClass extends BenchmarkBase {
121+
BenchInlinedClass() : super('MultipleReturns.Inlined.Class');
122+
123+
@override
124+
void run() {
125+
int sum = 0;
126+
for (int i = 0; i < N; ++i) {
127+
final result = inlinedClass();
128+
final int r0 = result.result0;
129+
final String r1 = result.result1;
130+
sum += r0 + r1.length;
131+
}
132+
if (sum != expectedSum) throw 'Bad result: $sum';
133+
}
134+
}
135+
136+
class BenchNotInlinedClass extends BenchmarkBase {
137+
BenchNotInlinedClass() : super('MultipleReturns.NotInlined.Class');
138+
139+
@override
140+
void run() {
141+
int sum = 0;
142+
for (int i = 0; i < N; ++i) {
143+
final result = notInlinedClass();
144+
final int r0 = result.result0;
145+
final String r1 = result.result1;
146+
sum += r0 + r1.length;
147+
}
148+
if (sum != expectedSum) throw 'Bad result: $sum';
149+
}
150+
}
151+
152+
class BenchForwardedClass extends BenchmarkBase {
153+
BenchForwardedClass() : super('MultipleReturns.Forwarded.Class');
154+
155+
@override
156+
void run() {
157+
int sum = 0;
158+
for (int i = 0; i < N; ++i) {
159+
final result = forwardedClass();
160+
final int r0 = result.result0;
161+
final String r1 = result.result1;
162+
sum += r0 + r1.length;
163+
}
164+
if (sum != expectedSum) throw 'Bad result: $sum';
165+
}
166+
}
167+
168+
169+
class BenchInlinedRecord extends BenchmarkBase {
170+
BenchInlinedRecord() : super('MultipleReturns.Inlined.Record');
171+
172+
@override
173+
void run() {
174+
int sum = 0;
175+
for (int i = 0; i < N; ++i) {
176+
final result = inlinedRecord();
177+
final int r0 = result.$0;
178+
final String r1 = result.$1;
179+
sum += r0 + r1.length;
180+
}
181+
if (sum != expectedSum) throw 'Bad result: $sum';
182+
}
183+
}
184+
185+
class BenchNotInlinedRecord extends BenchmarkBase {
186+
BenchNotInlinedRecord() : super('MultipleReturns.NotInlined.Record');
187+
188+
@override
189+
void run() {
190+
int sum = 0;
191+
for (int i = 0; i < N; ++i) {
192+
final result = notInlinedRecord();
193+
final int r0 = result.$0;
194+
final String r1 = result.$1;
195+
sum += r0 + r1.length;
196+
}
197+
if (sum != expectedSum) throw 'Bad result: $sum';
198+
}
199+
}
200+
201+
class BenchForwardedRecord extends BenchmarkBase {
202+
BenchForwardedRecord() : super('MultipleReturns.Forwarded.Record');
203+
204+
@override
205+
void run() {
206+
int sum = 0;
207+
for (int i = 0; i < N; ++i) {
208+
final result = forwardedRecord();
209+
final int r0 = result.$0;
210+
final String r1 = result.$1;
211+
sum += r0 + r1.length;
212+
}
213+
if (sum != expectedSum) throw 'Bad result: $sum';
214+
}
215+
}
216+
217+
class BenchInlinedRecordNamed extends BenchmarkBase {
218+
BenchInlinedRecordNamed() : super('MultipleReturns.Inlined.RecordNamed');
219+
220+
@override
221+
void run() {
222+
int sum = 0;
223+
for (int i = 0; i < N; ++i) {
224+
final result = inlinedRecordNamed();
225+
final int r0 = result.result0;
226+
final String r1 = result.result1;
227+
sum += r0 + r1.length;
228+
}
229+
if (sum != expectedSum) throw 'Bad result: $sum';
230+
}
231+
}
232+
233+
class BenchNotInlinedRecordNamed extends BenchmarkBase {
234+
BenchNotInlinedRecordNamed() : super('MultipleReturns.NotInlined.RecordNamed');
235+
236+
@override
237+
void run() {
238+
int sum = 0;
239+
for (int i = 0; i < N; ++i) {
240+
final result = notInlinedRecordNamed();
241+
final int r0 = result.result0;
242+
final String r1 = result.result1;
243+
sum += r0 + r1.length;
244+
}
245+
if (sum != expectedSum) throw 'Bad result: $sum';
246+
}
247+
}
248+
249+
class BenchForwardedRecordNamed extends BenchmarkBase {
250+
BenchForwardedRecordNamed() : super('MultipleReturns.Forwarded.RecordNamed');
251+
252+
@override
253+
void run() {
254+
int sum = 0;
255+
for (int i = 0; i < N; ++i) {
256+
final result = forwardedRecordNamed();
257+
final int r0 = result.result0;
258+
final String r1 = result.result1;
259+
sum += r0 + r1.length;
260+
}
261+
if (sum != expectedSum) throw 'Bad result: $sum';
262+
}
263+
}
264+
265+
void main() {
266+
final benchmarks = [
267+
BenchInlinedList(),
268+
BenchInlinedClass(),
269+
BenchInlinedRecord(),
270+
BenchInlinedRecordNamed(),
271+
BenchNotInlinedList(),
272+
BenchNotInlinedClass(),
273+
BenchNotInlinedRecord(),
274+
BenchNotInlinedRecordNamed(),
275+
BenchForwardedList(),
276+
BenchForwardedClass(),
277+
BenchForwardedRecord(),
278+
BenchForwardedRecordNamed(),
279+
];
280+
281+
for (final benchmark in benchmarks) {
282+
benchmark.warmup();
283+
}
284+
for (final benchmark in benchmarks) {
285+
benchmark.report();
286+
}
287+
}

pkg/_fe_analyzer_shared/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: _fe_analyzer_shared
2-
version: 49.0.0
2+
version: 50.0.0
33
description: Logic that is shared between the front_end and analyzer packages.
44
repository: https://github.com/dart-lang/sdk/tree/main/pkg/_fe_analyzer_shared
55

0 commit comments

Comments
 (0)