This CL adds a Node.toText method together with an AstPrinter. These
facility and better toString implementation on AST nodes while allowing
for toString independent printing of AST to use in testing. This also
add support for an integrated toString of custom/internal nodes.
Some work is still needed in bringing the toString implementation on
all nodes to the old quality, and not all internal nodes have
customized textual representations yet. This work is left for future
CLs.
Change-Id: Ib0bf8a0bc02f489dfacdc8aa5f96da9c52f26058
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150923
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
The utility class DartTypeComparator allows to compare two dart types
under various assumptions, such as ignoring nullability at the
top-level type node or equating all top types.
Change-Id: I998e4a0a3ac236077cd1bcd12a5ad146ff10bb1d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149427
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This CL embeds the sdk_nnbd/lib/_internal/allowed_experiments.json
into the CFE and uses this to allow experiments enabled on a
per library basis. The file is embedded through generated code to
avoid reliance on access to the file itself.
A presubmit check is also added to ensure that the json file and
the generated code are in sync.
This work is in preparation for https://github.com/dart-lang/sdk/issues/41538
Change-Id: Ic03c0fc69684d124c685f2fe6e80423a7e751530
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149064
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
This moves late lowered annotations from the field declaration to the
synthesized getters and setters, and adds annotations to the synthesized
setter for external fields.
Change-Id: I50e6cb9e155877a2be4d92ea2d9c9dc7796fef8f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148521
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Add a kernel transformation which removes redundant casts and reduces
some casts to null checks. This transformation assumes that type
system is sound and subtyping relation is transitive. So in NNBD weak
mode this transformation is always correct. In NNBD strong mode
this transformation is correct only if opted-out libraries are not
allowed.
The following patterns are handled:
If S <: T (this includes S <: T? in weak mode)
S x; x as T => x
If S <: T? in strong mode
S x; x as T => (x == null) ? x as T : x
This kernel transformation is not specific to the VM and can be reused
by other back-ends such as dart2js and DDC.
Fixes https://github.com/dart-lang/sdk/issues/40892
Issue https://github.com/dart-lang/sdk/issues/40893
Change-Id: I466ba96d763d5358011c768400c5225fa7bf5e67
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139314
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
The support is added for the follwing statements:
* YieldStatement
* Block
* VariableDeclaration (as a statement)
* IfStatement
* EmptyStatement
+ improve diagnostics in related unit tests
Change-Id: Ib738227c6e8c1963aeaee52630953e07cef4b093
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/146800
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Errors involving superinterfaces in class declarations will now mention
both the type alias and the unaliased type, e.g., in cases like
`class A extends T {}` where `typedef T = void;`.
Change-Id: I5bb575b98329e8338560d1ee5dc18e71da9711e4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/146720
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Erik Ernst <eernst@google.com>
* Refactor a test to make it easier to extend it later.
* Allow the crashing reproduction minimizer to search for a new target
if it finds another interesting crash.
* Fix update_expectations tool to include textual_outline
* Fix leakingDebugToString on Library
Change-Id: I9a59151f2ad5c2d91b4cbbe10d864fe9928221eb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/146804
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
E.g., reproducing #40707:
$ time out/ReleaseX64/dart pkg/front_end/test/crashing_test_case_minimizer.dart --platform=[...]/flutter_web_sdk/kernel/flutter_ddc_sdk.dill --invalidate=[...]/gallery/lib/main.dart --target=ddc --widgetTransformation [...]/gallery/lib/main.dart
[...]
DONE
Uri file://[...]/gallery/.dart_tool/package_config.json has this content:
{
"packages": [
{
"name": "flutter",
"rootUri": "file://[...]/flutter/packages/flutter",
"packageUri": "lib/",
"languageVersion": "2.2"
},
{
}
],
"generatorVersion": "2.9.0-3.0.dev.flutter-b0d35855d8"
}
====================
Uri file://[...]/gallery/lib/main.dart has this content:
import 'package:flutter/material.dart';
class RootPage extends StatelessWidget {
====================
Uri file://[...]/flutter/packages/flutter/lib/foundation.dart has this content:
export 'src/foundation/diagnostics.dart';
====================
Uri file://[...]/flutter/packages/flutter/lib/material.dart has this content:
export 'widgets.dart';
====================
Uri file://[...]/flutter/packages/flutter/lib/src/foundation/diagnostics.dart has this content:
abstract class DiagnosticableTree with Diagnosticable {
====================
Uri file://[...]/flutter/packages/flutter/lib/widgets.dart has this content:
export 'src/widgets/framework.dart';
export 'src/widgets/widget_inspector.dart';
====================
Uri file://[...]/flutter/packages/flutter/lib/src/widgets/framework.dart has this content:
import 'package:flutter/foundation.dart';
abstract class Widget extends DiagnosticableTree {
}
abstract class StatelessWidget extends Widget {
====================
Uri file://[...]/flutter/packages/flutter/lib/src/widgets/widget_inspector.dart has this content:
abstract class _HasCreationLocation {
}
class _Location {
====================
real 5m28.400s
user 7m24.233s
sys 0m9.895s
Change-Id: Ide66ad928699b781f3cfa8de11536cc8125983e2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/145080
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>