TFA currently sets parameter defaults to null when the parameter is unused. The kernel verifier tries to verify that no parameter initializers are null. This causes assertions to fail in dart2wasm when we run the verifier after TFA.
Change-Id: I4e44eca2398b7266f6cb3bbf200009e73e64cbf4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/479321
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Nate Biggs <natebiggs@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This CL adds the field `thisExpression` to the Kernel AST nodes
representing invocations of methods, getters, and setters. The field
is initially populated with `ThisExpression` nodes, and eventually it
will be set to a `VariableGet` of a `ThisVariable` in the new variable
model.
Part of https://github.com/dart-lang/sdk/issues/61572
TEST=existing
Change-Id: I9d8e96cfe5c392f93d041d8947883fc86189c142
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/474320
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
This marks constructors whose parameter types have cyclic depencies as erroneous and uses this to avoid type checking invocations. This allows for using the FieldFragmentMixinDeclaration implementation of buildFieldInitializer, which avoid building field initializers twice.
This is done in preparation for support new field initializer scopes for primary constructors.
Change-Id: I302ca6fe2f4de5be0c8b8df1b13570b390c4aa2a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/474720
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
`supportsLateFields` is replaced by `isLateLocalLoweringEnabled` and `isLateFieldLoweringEnabled`. This updates the reference to it in
`Target.supportsLateLoweringSentinel` documentation.
Change-Id: I55f69ea6c5cf5ad590e73e9d224f0a7450872352
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/470660
Reviewed-by: Ömer Ağacan <omersa@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This reverts commit c616db31d2.
Reason for revert: Fix landed downstream in Flutter engine: https://github.com/flutter/flutter/pull/180127
Original change's description:
> Revert "[ DDC / CFE ] Add support for allowing imports of unsupported libraries"
>
> This reverts commit b5e60be49d.
>
> Reason for revert: broke Flutter web engine tests
>
> Original change's description:
> > [ DDC / CFE ] Add support for allowing imports of unsupported libraries
> >
> > This change adds support for allowing for imports of unsupported
> > platform-specific libraries when the
> > `--include-unsupported-platform-library-stubs` flag is provided to the
> > CFE.
> >
> > This flag sets the `includeUnsupportedPlatformLibraryStubs` property in
> > `TargetFlags`, which `Target`s can use to conditionally return different
> > `DartLibrarySupport` objects with different supported/unsupported
> > library sets.
> >
> > A `checkForUnsupportedDartColonImports` function has been added to
> > `Target` that uses the value of `dartLibrarySupport` to determine if
> > there's any unsupported library imports. This function is called after
> > the various transformation operations provided by the `Target`
> > implementation, meaning the import of an unsupported library specified
> > in `dartLibrarySupport` will now result in a compilation error (this
> > includes `dart:mirrors` imports for VM targets when mirrors are
> > disabled, which was previously handled by the VM itself).
> >
> > Related to https://github.com/dart-lang/sdk/issues/62125
> >
> > TEST=Tests added / modified
> >
> > Change-Id: Ife819b2e1a6d28f67d80aab6701cd23a1724aa4d
> > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/465760
> > Reviewed-by: Nicholas Shahan <nshahan@google.com>
> > Reviewed-by: Johnni Winther <johnniwinther@google.com>
> > Commit-Queue: Ben Konyi <bkonyi@google.com>
>
> Change-Id: I0b59f00e55a2424f783351abd977eb38409ce01f
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/469100
> Reviewed-by: Nate Biggs <natebiggs@google.com>
> Commit-Queue: Alexander Markov <alexmarkov@google.com>
> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
> Reviewed-by: Ben Konyi <bkonyi@google.com>
> Reviewed-by: Sigmund Cherem <sigmund@google.com>
Change-Id: I1ae2eac675432286aebabea3c1f58caf35a27fbb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/469240
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
This reverts commit b5e60be49d.
Reason for revert: broke Flutter web engine tests
Original change's description:
> [ DDC / CFE ] Add support for allowing imports of unsupported libraries
>
> This change adds support for allowing for imports of unsupported
> platform-specific libraries when the
> `--include-unsupported-platform-library-stubs` flag is provided to the
> CFE.
>
> This flag sets the `includeUnsupportedPlatformLibraryStubs` property in
> `TargetFlags`, which `Target`s can use to conditionally return different
> `DartLibrarySupport` objects with different supported/unsupported
> library sets.
>
> A `checkForUnsupportedDartColonImports` function has been added to
> `Target` that uses the value of `dartLibrarySupport` to determine if
> there's any unsupported library imports. This function is called after
> the various transformation operations provided by the `Target`
> implementation, meaning the import of an unsupported library specified
> in `dartLibrarySupport` will now result in a compilation error (this
> includes `dart:mirrors` imports for VM targets when mirrors are
> disabled, which was previously handled by the VM itself).
>
> Related to https://github.com/dart-lang/sdk/issues/62125
>
> TEST=Tests added / modified
>
> Change-Id: Ife819b2e1a6d28f67d80aab6701cd23a1724aa4d
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/465760
> Reviewed-by: Nicholas Shahan <nshahan@google.com>
> Reviewed-by: Johnni Winther <johnniwinther@google.com>
> Commit-Queue: Ben Konyi <bkonyi@google.com>
Change-Id: I0b59f00e55a2424f783351abd977eb38409ce01f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/469100
Reviewed-by: Nate Biggs <natebiggs@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
This change adds support for allowing for imports of unsupported
platform-specific libraries when the
`--include-unsupported-platform-library-stubs` flag is provided to the
CFE.
This flag sets the `includeUnsupportedPlatformLibraryStubs` property in
`TargetFlags`, which `Target`s can use to conditionally return different
`DartLibrarySupport` objects with different supported/unsupported
library sets.
A `checkForUnsupportedDartColonImports` function has been added to
`Target` that uses the value of `dartLibrarySupport` to determine if
there's any unsupported library imports. This function is called after
the various transformation operations provided by the `Target`
implementation, meaning the import of an unsupported library specified
in `dartLibrarySupport` will now result in a compilation error (this
includes `dart:mirrors` imports for VM targets when mirrors are
disabled, which was previously handled by the VM itself).
Related to https://github.com/dart-lang/sdk/issues/62125
TEST=Tests added / modified
Change-Id: Ife819b2e1a6d28f67d80aab6701cd23a1724aa4d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/465760
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
This updates the Initializer classes such that InvalidInitializer has a message and will throw at runtime, similar to InvalidExpression. All initializers have positions and only FieldInitializer and SuperInitializer have an isSynthetic field.
TEST=pkg/front_end/testcases/general/invalid_initializer.dart
Change-Id: Ic444bb1dc273b433ac70249240527d115deaa332
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/463661
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Now moves mixin applications into their own libraries that can be
imported separately from the rest of the code in the originating
library.
Then adds an import to the new library containing the mixin application
to any libraries that use it.
This ensures the import graph is accurate while only making sure it
remains minimal.
TEST=Added case to pkg/vm testcases.
Bug: https://github.com/dart-lang/sdk/issues/43089
Change-Id: I56b6ea1db8261e0d0508c2d7e62d0c13fbe9678b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/457260
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Nate Biggs <natebiggs@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
As a part of this CL, the following was changed:
* Instead of `VariableInitialization` implementing `VariableDeclaration`, `VariableDeclaration` now implements `VariableInitialization`.
* `InternalLocalVariable` now implements `LocalVariable`. It delegates most of its members to the variable it wraps around, and the implementations of the `TreeNode` members are throwing.
* Some tests in the bytecode generator under the experimental type started to fail and are skipped.
Part of https://github.com/dart-lang/sdk/issues/61572
Change-Id: I06b391cc762d5935f528d208ff5e27eccf311a47
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/462981
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
This adds an internal wrapper expression for redirecting factory invocations. This holds a reference to the original redirecting factory constructor along with the resulting invocation of the generative or factory constructor. The node is removed during constant evaluation and only available to backends through the pre-modular transformations.
TEST=existing
Change-Id: I35c19766117ab2942aefddb4ccebcd2df66babf3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/454820
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
This CL reduces the noise of future CFE experiments in the
backends. Whenever new nodes will be added as an experiment, the
related exception-throwing implementations will be added to the
mixins, eliminating the need to add the visit methods to the backend
code directly. The experimental type addresses a similar issue in
exhaustive switch statements and expressions.
TEST=existing
Change-Id: I1a021e11a159a992500c42287cbe6ef027bf54a2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/455080
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Nate Biggs <natebiggs@google.com>
Reviewed-by: Ömer Ağacan <omersa@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
This CL adds two tools
* A dill extractor tool which extracts the source files inside the dill
to a new directory, trying to recrease the package config too so the
sources can be compiled again. Thought as being useful for doing
benchmarks between the CFE and the analyzer to make sure they look at
the exact same source files. No more. No less.
* A CFE compile entry point that compiles all files in a directory.
Again thought as being useful to compare the CFE with the Analyzer.
Additionally it introduces "--gcs=<int>" to `benchmarker.dart` so it can
do multiple runs and do statistics on combined gc times.
Usage example:
```
$ out/ReleaseX64/dart pkg/front_end/tool/compile.dart pkg/front_end/tool/compile.dart
$ out/ReleaseX64/dart-sdk/bin/dart pkg/kernel/bin/dill_extractor.dart pkg/front_end/tool/compile.dart.dill /tmp/extracted_compile_dart_compile
Done. Wrote 687 source files.
$ out/ReleaseX64/dart-sdk/bin/dart compile aot-snapshot pkg/front_end/tool/compile_files_in_folders.dart
Generated: [...]/pkg/front_end/tool/compile_files_in_folders.aot
$ out/ReleaseX64/dart-sdk/bin/dart compile aot-snapshot pkg/analyzer_cli/bin/analyzer.dart
Generated: [...]/pkg/analyzer_cli/bin/analyzer.aot
$ time out/ReleaseX64/dart-sdk/bin/dartaotruntime pkg/front_end/tool/compile_files_in_folders.aot /tmp/extracted_compile_dart_compile/
Got 626 libraries.
Finished in 0:00:03.496817
real 0m3.530s
user 0m4.985s
sys 0m0.257s
$ time out/ReleaseX64/dart-sdk/bin/dartaotruntime pkg/analyzer_cli/bin/analyzer.aot /tmp/extracted_compile_dart_compile/
Analyzing /tmp/extracted_compile_dart_compile...
warning • Target of URI doesn't exist: 'package:compiler/src/io/source_file.dart'. • package:_fe_analyzer_shared/src/scanner/utf8_bytes_scanner.dart:5:16 • uri_does_not_exist_in_doc_import
1 warning found.
real 0m8.479s
user 0m9.997s
sys 0m1.048s
$ out/ReleaseX64/dart pkg/front_end/tool/benchmarker.dart --silent --iterations=10 --gcs=5 --snapshot=pkg/front_end/tool/compile_files_in_folders.aot --snapshot=pkg/analyzer_cli/bin/analyzer.aot --arguments="/tmp/extracted_compile_dart_compile/"
Will now run 10 iterations with 2 snapshots.
..............................
Comparing snapshot #1 (compile_files_in_folders.aot) with snapshot #2 (analyzer.aot)
msec task-clock:u: 141.1012% +/- 1.5550% (6281.55 +/- 69.22) (4451.81 -> 10733.36)
page-faults:u: 47.5414% +/- 0.7786% (45602.90 +/- 746.84) (95922.50 -> 141525.40)
cycles:u: 119.3182% +/- 1.5751% (22131655652.90 +/- 292155654.08) (18548436164.50 -> 40680091817.40)
instructions:u: 140.2463% +/- 0.0340% (30410953910.60 +/- 7375789.67) (21683959961.20 -> 52094913871.80)
branch-misses:u: 97.9816% +/- 7.3049% (73071988.00 +/- 5447773.30) (74577266.40 -> 147649254.40)
seconds time elapsed: 141.0789% +/- 1.5479% (6.28 +/- 0.07) (4.45 -> 10.74)
seconds user: 124.4165% +/- 1.8322% (5.31 +/- 0.08) (4.26 -> 9.57)
seconds sys: 521.0422% +/- 17.4291% (0.98 +/- 0.03) (0.19 -> 1.16)
Comparing GC:
Combined GC time: 63.8901% +/- 1.2946% (1008.76 +/- 20.44) (1578.90 -> 2587.66)
```
(note that benchmarker passes `--deterministic` and limits the run to one cpu, both of which (potentially) makes it slower --- which is why the stats say 4.45 s instead of ~3.53 s and 10.74 s instead of ~8.48 s)
Change-Id: I785620ce40af11ca1f7b6c88a0ac863b2200f7d3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449180
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
It's not necessary for `package:kernel` and
`package:_fe_analyzer_shared` to have duplicate implementations of
this method. `package:kernel` depends on
`package:_fe_analyzer_shared`, so they can share one definition.
Change-Id: I6a6a696462a0e22a2ea818c42f58187c45821afc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/447842
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
I've been experimenting with using the Jj source control tool, and
since it's not natively supported by `depot_tools`, this means I have
to manually invoke `git cl presubmit`. `git cl presubmit` accepts a
single argument which is the name of the upstream branch.
The way this is intended to work is that the upstream branch name gets
passed into the `PRESUBMIT.py` scripts, and they use it rather than
making assumptions about what the upstream branch is.
Prior to this change, our presubmit scripts for _fe_analyzer_shared,
front_end, frontend_server, and kernel were ignoring the upstream
branch and instead using git's `@{u}` shorthand (see
https://git-scm.com/docs/git-rev-parse). This caused them to behave
strangely when no upstream branch is set, which sometimes happens when
running `git cl presubmit` manually.
This change avoids the strange behavior by getting the upstream branch
from the input to `PRESUBMIT.py`, as intended.
Change-Id: I6a6a696423221d7b945b083fd72585f1f5a7e312
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/447626
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
For expression evaluation we want to be "more than dart" in that if for
instance we can see (in the debugger) that a List contains `B`s (even
if it's typed as containing `A`s) we'd like to be able to access things
on `B` (without manually having to cast to either `B` or `dynamic`).
Furthermore - when we in the debugger can see that it's a `B`, and that
`B` has, say, a field `_privateField` or a method `_privateMethod` we'd
like to be able to access that even if `B` is in another library.
This CL - for expression evaluation - makes dynamic accesses and calls
where we would normally issue a "missing getter" (etc) error, and tries
to create a `Name` so private access is possible.
Change-Id: I887318a50413e9a5f11ec685b27719edd312dca0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/446260
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>