Skip to content

Commit

Permalink
Version 2.19.0-339.0.dev
Browse files Browse the repository at this point in the history
Merge 9896f1c into dev
  • Loading branch information
Dart CI committed Oct 25, 2022
2 parents 11d520d + 9896f1c commit d517acc
Show file tree
Hide file tree
Showing 60 changed files with 2,346 additions and 661 deletions.
18 changes: 15 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,13 @@
[#49687]: https://github.com/dart-lang/sdk/issues/49687
[#2020]: https://github.com/dart-lang/language/issues/2020

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

### Libraries

#### `dart:core`
Expand Down Expand Up @@ -139,15 +146,20 @@

#### Analyzer

- added static enforcement of new `mustBeOverridden` annotation
- added quick fixes for diagnostics:
- add static enforcement of new `mustBeOverridden` annotation
- add quick fixes for diagnostics:
`abstract_field_initializer`,
`ambiguous_extension_member_access`,
`argument_type_not_assignable`,
`assert_in_redirecting_constructor`,
`combinators_ordering`,
`default_value_on_required_parameter`,
`initializing_formal_for_non_existent_field`,
`missing_default_value_for_parameter_positional`,
`super_formal_parameter_without_associated_named`,
- added new Hint: `cast_from_null_always_fails`
`undefined_identifier`
- add new hints: `cast_from_null_always_fails`, `duplicate_export`
- remove hint: `invalid_override_different_default_values`

#### Linter

Expand Down
8 changes: 4 additions & 4 deletions DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ vars = {
"async_rev": "18a780efd914c3d848ddc1af5f6c83903a8b2d2d",
"bazel_worker_rev": "03717ca4c2bbf1d74f26c89673426e076288242a",
"benchmark_harness_rev": "6a116758f2b96e92659194bcda990f42106a01d3",
"boolean_selector_rev": "1d3565e2651d16566bb556955b96ea75018cbd0c",
"boolean_selector_rev": "ea0ad2775cc682078571997f6c0512c384ac30f0",
"boringssl_gen_rev": "ced85ef0a00bbca77ce5a91261a5f2ae61b1e62f",
"boringssl_rev": "87f316d7748268eb56f2dc147bd593254ae93198",
"browser-compat-data_tag": "ac8cae697014da1ff7124fba33b0b4245cc6cd1b", # v1.0.22
Expand All @@ -122,12 +122,12 @@ vars = {
# For more details, see https://github.com/dart-lang/sdk/issues/30164.
"dart_style_rev": "f79a9828ad07e50d6e8352ac154cc16eb4d78d5c", # manually rev'd

"dartdoc_rev": "51464a30fad5ff38f52f60602c0f02ff205edd0c",
"dartdoc_rev": "8878245e0766bc943955e3e3883832251e48d95d",
"devtools_rev": "b21cd59f1f6bb60cacd59ba39e376d2a50d82f74",
"ffi_rev": "fb5f2667826c0900e551d19101052f84e35f41bf",
"file_rev": "b2e31cb6ef40b223701dbfa0b907fe58468484d7",
"fixnum_rev": "e0b17cc1f639c55a9c24947392c64b5a68992535",
"glob_rev": "ee812790f4d98587a363e65d5af484ed9c6943f8",
"glob_rev": "073007c5d00822a0ddc964c027785d1eb5559d68",
"html_rev": "0bf601959ac98e6cdf1925a1cdab70bd6a5ddc45",
"http_multi_server_rev": "20bf079c8955d1250a45afb9cb096472a724a551",
"http_parser_rev": "c73967535ce31120e218120f70ef98cc22688c82",
Expand All @@ -144,7 +144,7 @@ vars = {
"matcher_rev": "6a9b83bbd73e50df2058b3e8e4aa301df49569c6",
"mime_rev": "bf041aa372a27aae6f94e185aa0af3932b9de98b",
"mockito_rev": "02ad6c793d9ea970b5cc892f45a55d12d8ebf4e8",
"oauth2_rev": "199ebf15cbd5b07958438184f32e41c4447a57bf",
"oauth2_rev": "ee5c9b1ef5bfcd282c0637f319155f89634385ed",
"package_config_rev": "cff98c90acc457a3b0750f0a7da0e351a35e5d0c",
"path_rev": "9955b27b9bb98d87591208e19eb01c51d29fd467",
"ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
Expand Down
287 changes: 287 additions & 0 deletions benchmarks/MultipleReturns/dart/MultipleReturns.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,287 @@
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:benchmark_harness/benchmark_harness.dart';

// Micro-benchmark for multiple returns.
//
// The goal of this benchmark is to compare and track performance of
// various ways to return multiple values from a method.

int input1 = int.parse('42');
String input2 = input1.toString();

const int N = 1000000;
final int expectedSum = (input1 + input2.length) * N;

class ResultClass {
final int result0;
final String result1;
const ResultClass(this.result0, this.result1);
}

@pragma('vm:prefer-inline')
@pragma('dart2js:prefer-inline')
List<Object> inlinedList() => [input1, input2];

@pragma('vm:never-inline')
@pragma('dart2js:never-inline')
List<Object> notInlinedList() => [input1, input2];

@pragma('vm:never-inline')
@pragma('dart2js:never-inline')
List<Object> forwardedList() => notInlinedList();

@pragma('vm:prefer-inline')
@pragma('dart2js:prefer-inline')
ResultClass inlinedClass() => ResultClass(input1, input2);

@pragma('vm:never-inline')
@pragma('dart2js:never-inline')
ResultClass notInlinedClass() => ResultClass(input1, input2);

@pragma('vm:never-inline')
@pragma('dart2js:never-inline')
ResultClass forwardedClass() => notInlinedClass();

@pragma('vm:prefer-inline')
@pragma('dart2js:prefer-inline')
(int, String) inlinedRecord() => (input1, input2);

@pragma('vm:never-inline')
@pragma('dart2js:never-inline')
(int, String) notInlinedRecord() => (input1, input2);

@pragma('vm:never-inline')
@pragma('dart2js:never-inline')
(int, String) forwardedRecord() => notInlinedRecord();

@pragma('vm:prefer-inline')
@pragma('dart2js:prefer-inline')
({int result0, String result1}) inlinedRecordNamed() => (result0: input1, result1: input2);

@pragma('vm:never-inline')
@pragma('dart2js:never-inline')
({int result0, String result1}) notInlinedRecordNamed() => (result0: input1, result1: input2);

@pragma('vm:never-inline')
@pragma('dart2js:never-inline')
({int result0, String result1}) forwardedRecordNamed() => notInlinedRecordNamed();

class BenchInlinedList extends BenchmarkBase {
BenchInlinedList() : super('MultipleReturns.Inlined.List');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = inlinedList();
final int r0 = result[0] as int;
final String r1 = result[1] as String;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchNotInlinedList extends BenchmarkBase {
BenchNotInlinedList() : super('MultipleReturns.NotInlined.List');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = notInlinedList();
final int r0 = result[0] as int;
final String r1 = result[1] as String;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchForwardedList extends BenchmarkBase {
BenchForwardedList() : super('MultipleReturns.Forwarded.List');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = forwardedList();
final int r0 = result[0] as int;
final String r1 = result[1] as String;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchInlinedClass extends BenchmarkBase {
BenchInlinedClass() : super('MultipleReturns.Inlined.Class');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = inlinedClass();
final int r0 = result.result0;
final String r1 = result.result1;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchNotInlinedClass extends BenchmarkBase {
BenchNotInlinedClass() : super('MultipleReturns.NotInlined.Class');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = notInlinedClass();
final int r0 = result.result0;
final String r1 = result.result1;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchForwardedClass extends BenchmarkBase {
BenchForwardedClass() : super('MultipleReturns.Forwarded.Class');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = forwardedClass();
final int r0 = result.result0;
final String r1 = result.result1;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}


class BenchInlinedRecord extends BenchmarkBase {
BenchInlinedRecord() : super('MultipleReturns.Inlined.Record');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = inlinedRecord();
final int r0 = result.$0;
final String r1 = result.$1;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchNotInlinedRecord extends BenchmarkBase {
BenchNotInlinedRecord() : super('MultipleReturns.NotInlined.Record');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = notInlinedRecord();
final int r0 = result.$0;
final String r1 = result.$1;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchForwardedRecord extends BenchmarkBase {
BenchForwardedRecord() : super('MultipleReturns.Forwarded.Record');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = forwardedRecord();
final int r0 = result.$0;
final String r1 = result.$1;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchInlinedRecordNamed extends BenchmarkBase {
BenchInlinedRecordNamed() : super('MultipleReturns.Inlined.RecordNamed');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = inlinedRecordNamed();
final int r0 = result.result0;
final String r1 = result.result1;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchNotInlinedRecordNamed extends BenchmarkBase {
BenchNotInlinedRecordNamed() : super('MultipleReturns.NotInlined.RecordNamed');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = notInlinedRecordNamed();
final int r0 = result.result0;
final String r1 = result.result1;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

class BenchForwardedRecordNamed extends BenchmarkBase {
BenchForwardedRecordNamed() : super('MultipleReturns.Forwarded.RecordNamed');

@override
void run() {
int sum = 0;
for (int i = 0; i < N; ++i) {
final result = forwardedRecordNamed();
final int r0 = result.result0;
final String r1 = result.result1;
sum += r0 + r1.length;
}
if (sum != expectedSum) throw 'Bad result: $sum';
}
}

void main() {
final benchmarks = [
BenchInlinedList(),
BenchInlinedClass(),
BenchInlinedRecord(),
BenchInlinedRecordNamed(),
BenchNotInlinedList(),
BenchNotInlinedClass(),
BenchNotInlinedRecord(),
BenchNotInlinedRecordNamed(),
BenchForwardedList(),
BenchForwardedClass(),
BenchForwardedRecord(),
BenchForwardedRecordNamed(),
];

for (final benchmark in benchmarks) {
benchmark.warmup();
}
for (final benchmark in benchmarks) {
benchmark.report();
}
}
2 changes: 1 addition & 1 deletion pkg/_fe_analyzer_shared/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: _fe_analyzer_shared
version: 49.0.0
version: 50.0.0
description: Logic that is shared between the front_end and analyzer packages.
repository: https://github.com/dart-lang/sdk/tree/main/pkg/_fe_analyzer_shared

Expand Down
Loading

0 comments on commit d517acc

Please sign in to comment.