Commit Graph

41424 Commits

Author SHA1 Message Date
Johnni Winther fe3f2188ff [CFE] Widget tracking for extension method widget factories
This CL extends the widget tracking frontend kernel transformer to
support tracking the callsites of extension methods that act as widget
factories as the creation location of widgets.

To enable this support extension methods have to be annotated.

Fixes https://github.com/dart-lang/sdk/issues/50067

Originally created by gabriel@terwesten.net in
https://dart-review.googlesource.com/c/sdk/+/263380

Change-Id: I6efe8f081263e58659b9c6374542ad8f04361136
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275901
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2022-12-19 09:13:04 +00:00
Jens Johansen fa88e0c91f [analyzer] Add benchmarks of running dart analyze
This CL:
  * Adds a benchmark of running `dart analyze` on a single small file.
  * Adds a benchmark of running `dart analyze` on a single project.
  * Adds a benchmark of running `dart analyze` on several projects.
  * Adds a hidden flag to `dart analyze` so it reports ram usage:
    run via `dart analyze --format=json --memory` and the memory
    usage will be reported in the json output.

All the bencmarks run without and with cache for speed testing, and
without and with cache when measuring memory usage.

The idea of running this via `dart analyze` instead of running either
the script or the snapshot is to measure the "real world" speed which
could be different (although in practise it _does_ just run the
snapshot).

Future CL(s) should also add benchmarks for queries using the
language server.

Change-Id: Iad6d6d72c1a2ed18ab51d056b4914f8b6eb963e4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276100
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2022-12-19 08:22:32 +00:00
Stephen Adams fdeb41d111 [dart2js] Fix #50755
Bug: 50755
Change-Id: Icfd9349e2373c995255d3651c1f0c8f26c462cc6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276203
Auto-Submit: Stephen Adams <sra@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Sigmund Cherem <sigmund@google.com>
2022-12-17 03:27:58 +00:00
Sam Rawlins caa14a5eea Filter out ignored diagnostics in analyzer_cli when JSON reporter is used.
Fixes https://github.com/dart-lang/sdk/issues/50757

Change-Id: I76a7452d6c2f5977c64765c49f0ec949f1f9fadb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276182
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2022-12-17 03:02:28 +00:00
Ahmed Ashour 0c4c372d5e [analysis_server] associate RemoveNameFromDeclarationClause with various diagnostics
Bug #50753

Change-Id: I3520a1ce3af3bfc651df582505835468705bdda2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276061
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2022-12-16 22:03:50 +00:00
Paul Berry f835846705 Flow analysis: add support for promotion of cached values.
Implement the necessary flow analysis bookkeeping so that in a pattern
of the form `P1 && P2`, any type checks performed by `P1` will be
reflected in the matched value type used by `P2`.  To accomplish this,
we allocate a promotion key to represent the "cached value" matched by
every pattern and subpattern (so that `P1 && P2` promotes properly
even when in a subpattern of another pattern).  This promotion key is
stored (in the form of a `ReferenceWithType<Type>`) in the
`_PatternContext` class.

Also, move `_scrutineeReference` and `_scrutineeType` into
`_FlowAnalysisImpl`; this preserves the existing behaviour of
promoting the scrutinee expression, but with less bookkeeping (since
we don't need to pass it along from one context to the next).  And add
`_FlowAnalysisImpl._scrutineeSsaReference` so that if the scrutinee is
modified during execution of the switch statement, it won't be
erroneously promoted by patterns that follow.

Finally, implement some preliminary logic for `||` patterns to avoid
breaking existing tests.  I will fill this out (and test it
thoroughly) in a follow-up CL.

Bug: https://github.com/dart-lang/sdk/issues/50419
Change-Id: I0d934e706ad5b19cda46a198afb2fb7a4309829b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275788
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2022-12-16 21:11:25 +00:00
Srujan Gaddam f4bcada00d [pkg:js] Prep 0.6.6 release
Change-Id: I6d5861b1548eaa120fb86345f39af567b3f8316f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276200
Reviewed-by: Riley Porter <rileyporter@google.com>
Commit-Queue: Srujan Gaddam <srujzs@google.com>
2022-12-16 20:14:23 +00:00
Brian Wilkerson e845949df6 Add documentation on semantic highlighting
Change-Id: Ie836c01d167ec17df9d762a365da278499076e11
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276181
Reviewed-by: Kallen Tu <kallentu@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2022-12-16 19:17:32 +00:00
Kallen Tu 7bd4aee94a [cfe] Add mixin class flag to dill and binary.
Additionally, make class flags a uint because there are now more than 8 flags.

TEST=pkg/front_end/testcases/mixin_class/*

Change-Id: I4fe7babfa9911df0821cc73528e6b10b2ea3b92d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275402
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2022-12-16 19:12:59 +00:00
Nicholas Shahan 352ba74453 [3.0 alpha][core] Delete NullThrownError
TESTED=Ran CQ dryrun and approved failures for co19 tests that will be updated soon.

Change-Id: Ic0dc5fc084b1d0f3fce80dd88062f879abd7b556
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275840
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2022-12-16 17:46:48 +00:00
Ahmed Ashour f12f1ad664 [analysis_server] ReplaceWithNullAware to handle IndexExpression
Fixes #50691

Change-Id: I9bc6e1f72ff71623139ce94b3f3e94eba8ed4fd1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275941
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2022-12-16 17:29:38 +00:00
Daco Harkes 2435f0b398 [vm/ffi] Make elementAt an extension method
The CFE rewrite for structs, unions, and abi-specific integers is now
done on the extension methods.
The other native types are implemented in the extension methods
directly.

TEST=test/ffi

Closes: https://github.com/dart-lang/sdk/issues/50714
Change-Id: I578325733e3cd66200e80949d47ff12a13115b99
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276102
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
2022-12-16 16:33:12 +00:00
Chloe Stefantsova 3d3fdc7b46 [cfe] Allow 'Record' in legacy libraries if experiment flag is set
Closes https://github.com/dart-lang/sdk/issues/50511

Change-Id: Ib9a1922cab3ada271beb6958f73342d52d837257
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275701
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2022-12-16 12:52:29 +00:00
Josh Soref f9806280de [dart2js] Correct comment
Closes https://github.com/dart-lang/sdk/pull/50752

GitOrigin-RevId: 3a3b147a51994827fdee293a42661bde02a35ec6
Change-Id: I2633abdb469ae666820447af21a1bbe78f7466ab
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275985
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Slava Egorov <vegorov@google.com>
2022-12-16 09:04:59 +00:00
Sam Rawlins 94f20d7731 Revert "Remove all support for all strong-mode analysis options"
This reverts ea120b5d44

Change-Id: I97a1bf6ced06bf8bcab50a2fdb41732f13182a84
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276026
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2022-12-16 00:47:49 +00:00
Samuel Rawlins 6d05f249ff Revert "Remove preview-dart-2 option in analysis options"
This reverts commit f30e5de558.

Reason for revert: https://dart-review.googlesource.com/c/sdk/+/274921 broke customer test, and this CL sits right on top of it.

Original change's description:
> Remove preview-dart-2 option in analysis options
>
> Fixes https://github.com/dart-lang/sdk/issues/50680
>
> AnalysisOptionsHintCode is moved from generated `option_codes.g.dart` to `option_codes.dart`, for non-generated diagnostics:
>
> * AnalysisOptionsHintCode.DEPRECATED_LINT_HINT and
> * AnalysisOptionsHintCode.DUPLICATE_RULE_HINT
>
> Change-Id: I131fb2901fca26ff971b6c9c519ab2f0b983a65c
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275500
> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
> Commit-Queue: Samuel Rawlins <srawlins@google.com>
> Reviewed-by: Konstantin Shcheglov <scheglov@google.com>

# Not skipping CQ checks because original CL landed > 1 day ago.

Change-Id: Ia417aa5edc5b279a5fced43154de4cd5c9d3be2c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276023
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2022-12-15 22:54:51 +00:00
pq ea1473e6cd linter 1.32.0
See: https://github.com/dart-lang/linter/issues/3848

Change-Id: I73469ce43d52c1755875a39067b267f216ebd490
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275044
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
2022-12-15 22:51:28 +00:00
Ahmed Ashour a6f4fbe17b [analysis_server] ConvertToMapLiteral to handle types with typedef
Fixes #50581

Change-Id: Ieeb4c6730036e112bcf37353a18535f342fd28a5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275900
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2022-12-15 22:09:46 +00:00
Nicholas Shahan c39ac36ed3 [3.0 alpha][dart2js] Remove use of NullThrownError
It is being removed in Dart 3.0 and a `TypeError` should be used
instead. This is true in legacy code as well and all test
expectations will be updated.

Change-Id: I021fa4ecb1a9bbc404598113c65349e17926cd91
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275782
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2022-12-15 21:36:56 +00:00
Ahmed Ashour f652c7962b [analysis_server] fix AddNullCheck with null-aware operators
Fixes #50506

Change-Id: I8f7564ec7aaaf32888e9979254e450cd2633e307
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274442
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2022-12-15 21:13:41 +00:00
Ryan Macnak 933d2cf4e7 Change the default architecture in test.py from x64 to host.
This brings test.py into agreement with build.py, and makes development on arm64 hosts nicer.

Change-Id: Ic544b4eee0e27d9f395328297ed6108d4e4689f7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/257800
Reviewed-by: Jonas Termansen <sortie@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2022-12-15 20:41:33 +00:00
Kallen Tu 8e1162cb72 [analyzer] Add mixin classes to ClassElementImpl
Change-Id: I41cbbf218a9c8d7c26fa8f32e3b8022c51b42789
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275521
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
2022-12-15 19:20:06 +00:00
Michael Thomsen bcbf24ec3d [3.0 alpha] Remove deprecated CastError and FallThroughError dart:core errors
TEST=ci

Bug: https://github.com/dart-lang/sdk/issues/49529
Change-Id: I52495d3e5319f0555714f4f8247149afc06128a1
Cq-Include-Trybots: luci.dart.try:vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-reload-linux-debug-x64-try,dart-sdk-mac-arm64-try,dart-sdk-mac-try,vm-kernel-nnbd-mac-debug-arm64-try,vm-kernel-nnbd-mac-debug-x64-try,vm-kernel-precomp-nnbd-linux-debug-x64-try,dart-sdk-linux-arm64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/259041
Commit-Queue: Michael Thomsen <mit@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Lasse Nielsen <lrn@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2022-12-15 13:38:47 +00:00
Lasse R.H. Nielsen 2274ce9b05 Retire experiment flags introduced in 2.18.
Change-Id: I660bbf09c758f88589a10b0334ddd34c0620460d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275244
Commit-Queue: Lasse Nielsen <lrn@google.com>
Reviewed-by: Michael Thomsen <mit@google.com>
2022-12-15 13:18:50 +00:00
Alexander Markov 7ebd4dd61c [3.0 alpha] Remove deprecated public class CyclicInitializationError
This deprecated class cannot be removed just yet because
we still need to throw something in case of cyclic initialization
in Dart legacy libraries (which are still supported).

Class CyclicInitializationError is copied for each implementation
(VM, dart2js and DDC) and made private. Each implementation now has
an independent private class which can be removed separately.

TEST=ci
Issue: https://github.com/dart-lang/sdk/issues/49529
Change-Id: I8100bbe16636c12c4cbabbb5fe770f4c648c4249
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275120
Commit-Queue: Michael Thomsen <mit@google.com>
Reviewed-by: Lasse Nielsen <lrn@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2022-12-15 11:20:58 +00:00
Ilya Yanok 822d15e7cc nnbd_migration: fix crash on mixin override
Migration tool currently crashes if a class overrides
some methods it got by adding a mixin.

Added a test for that and fixed the crash, the fix
boils down to casting to just `InterfaceElement` instead
of `ClassElement`.

Tested: added a new test
Change-Id: Iab5ddb26c4930ed2020d6f3caa0710e55f24d8c2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275721
Commit-Queue: Ilya Yanok <yanok@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2022-12-15 09:19:38 +00:00
Ömer Sinan Ağacan 6cda72d39e [dart2wasm] Add special case for const adjacent strings
Language specification (section 17.2) says two strings are identical
when they're both constants and equal.

It doesn't mention adjacent strings, but looking at the tests, it seems
like juxtaposition of constant strings are expected to be constants as
well.

This adds a special case in string juxtaposition compiler to handle the
case where parts of the adjacent strings are all constants.

New passing tests:

- co19/Language/Expressions/Instance_Creation/Const/canonicalized_t05
- co19/Language/Expressions/Strings/adjacent_strings_t02
- language/const/string_test

Change-Id: Ib46582be492ba20c417546cbfb4e67b2d90e3ba3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275200
Commit-Queue: Ömer Ağacan <omersa@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2022-12-15 07:45:47 +00:00
Sam Rawlins f30e5de558 Remove preview-dart-2 option in analysis options
Fixes https://github.com/dart-lang/sdk/issues/50680

AnalysisOptionsHintCode is moved from generated `option_codes.g.dart` to `option_codes.dart`, for non-generated diagnostics:

* AnalysisOptionsHintCode.DEPRECATED_LINT_HINT and
* AnalysisOptionsHintCode.DUPLICATE_RULE_HINT

Change-Id: I131fb2901fca26ff971b6c9c519ab2f0b983a65c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275500
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2022-12-14 21:04:29 +00:00
Tess Strickland bd81c8bc06 [pkg/dart2native] Add checks to avoid MachO-related regressions.
Now that 9df6656aa9 has appropriately propagated and the build rules in
google3 have been updated, re-add checks to ensure that the empty
section used to pad the original header exists and that the new header
is smaller than the old header.

Bug: https://github.com/dart-lang/sdk/issues/49783
Change-Id: I5b8b31bf9edf4814686eb7928457a9a7d53c0727
Cq-Include-Trybots: luci.dart.try:dart-sdk-mac-try,dart-sdk-mac-arm64-try,pkg-mac-release-arm64-try,pkg-mac-release-try,vm-kernel-mac-release-arm64-try,vm-kernel-mac-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275622
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2022-12-14 20:16:57 +00:00
Brian Wilkerson ce99386077 Update the noSoundNullSafety flag to allow for testing
Change-Id: Ibf79675c758ffefaa8af7488dd1965f0fabbfc4b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275741
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2022-12-14 19:13:28 +00:00
Jens Johansen 959f0a299c [analyzer] Report memory usage on Windows too
Change-Id: I6a31370c51e40a9593f8875d365a43d9f4111aaf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275660
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2022-12-14 18:11:25 +00:00
Paul Berry c6d287cc05 Move business logic into shared patterns analysis for relational patterns.
Previously, the client had to know that the relational operator should
be looked up in the matched value type.  Now the shared analysis logic
requests the lookup and supplies the appropriate type.

It's a small change, and one might argue that it doesn't really move
around very much business logic, but it makes the tests more readable
so I think it's worth it.

Change-Id: I936d5f5f929f11800efe25974334c898c7e1072d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275360
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
2022-12-14 17:25:59 +00:00
Danny Tuppeny ec8918c20c [dds/dap] Handle errors parsing/casting launch/attach arguments and provide useful errors
Fixes https://github.com/dart-lang/sdk/issues/50709.

Change-Id: I35a7593ced462ab81d52069db831e5f95a9a4ba7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275623
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2022-12-14 17:19:05 +00:00
Joshua Litt 9b79ab636c [dart2wasm] Chunk copying large strings to JS.
This change is necessary for large strings because otherwise we hit V8's maximum argument limit to a function.

Change-Id: I2473d1c5acd62f16d509752c437678c697e7ebeb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275480
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Joshua Litt <joshualitt@google.com>
2022-12-14 17:16:01 +00:00
Sam Rawlins a5392b932b Re-categorize all SDK_VERSION_* codes as StaticWarningCode
Change-Id: If7a83f9f3258ce369dbe3142fcd5c088d6d88e40
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275160
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2022-12-14 16:14:38 +00:00
Kallen Tu 120bfdc076 [analyzer/cfe] Parse 'mixin class' behind sealed flag.
Allow 'mixin class' modifier which allows a class to be used as a mixin.
https://github.com/dart-lang/language/blob/master/working/base-interface-final/feature-specification.md

Change-Id: I6b4dac75f2ff09b7ef833c5e015b1baf7fa3883b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275144
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2022-12-14 15:41:58 +00:00
Paul Berry 9b294b846b Only set isExplicitlyExhaustive on switch statements without default clauses.
This enables the front end to skip the old-style (enum-based)
exhaustiveness checking algorithm when pattern support is enabled,
because with pattern support enabled, switches on enums are required
to be exhaustive (this will be checked by the new exhaustiveness
checking algorithm).

That in turn means that in the future, when we remove support for
language versions that lack patterns support, we will be able to
remove the old-style exhaustiveness checking algorithm.

This change has a small effect on code generated by the WASM back-end
(the only back-end that uses `isExplicitlyExhaustive`): for a switch
statement that is exhaustive *and* has an unreachable `default`
clause, after testing all the cases, the WASM back-end will generate a
branch to the `default` case.  Previously it would instead generate an
`unreachable` instruction.  There should be no behavioural difference
because the instruction in question is unreachable in both cases.
Also, there should be negligible code size difference because the body
of the `default` case is being emitted either way.

Bug: https://github.com/dart-lang/sdk/issues/50419
Change-Id: Id6bd7d9a540cb1b4d9c3624db8ff494438276bea
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274924
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2022-12-14 14:38:50 +00:00
Paul Berry 607b370933 Shared patterns analysis API: remove matchedType from method calls.
A desired feature for flow analysis of patterns is that the matched
value type of one subpattern may depend on promotions from previous
patterns.  For example, we want this to work:

    int? x = ...;
    if (x case null || < 0) ...;

This means that although the type of the scrutinee is `int?`, after
the subpattern `null` has been processed, type promotion should
promote the matched value type to `int`, so that the subpattern `< 0`
doesn't report an error.

This requires changing the API of the shared patterns analysis logic,
so that the client is no longer responsible for passing around the
matched value type.  Instead, flow analysis keeps track of it and
provides it to the client when requested.

In follow-up CLs I'll add the necessary logic to flow analysis to
actually promote the matched value type in situations like the example
above.

Change-Id: I6ce66962af32f9bd93bfe4082ba256de627d3cc6
Bug: https://github.com/dart-lang/sdk/issues/50419
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274942
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
2022-12-14 14:06:30 +00:00
Ömer Sinan Ağacan af5c53b087 [dart2wasm] Mark static variables initialized on assignment
New passing tests:

- co19/LibTest/core/Stopwatch/stop_A01_t01
- language/getter/setter_getters_setters_test
- language/identifier/naming_test
- language/lazy/static3_test
- language/lazy/static7_test
- language/lazy/static_test
- language/loop/for_in2_test
- language/new/statement_test
- language/nnbd/inference/variables_initialized_to_null_test
- language/operator/operator_test
- language/setter/setter0_test
- language/setter/setter1_test
- language/super/call2_test
- language/unsorted/inv_cse_licm_test

Change-Id: Id7dd53228f1476190dffe3b22ba91d04ed4c2a14
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275320
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Ömer Ağacan <omersa@google.com>
2022-12-14 13:38:27 +00:00
Johnni Winther 77e24a6736 [cfe] Migrate noSuchMethod forwarder tests to null-safety
Change-Id: I7fbfc06a864eaaf4052b736d756410be5d1ab531
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275601
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2022-12-14 13:12:09 +00:00
Johnni Winther e550718712 [cfe] Compute noSuchMethod forwarders in members builder
TEST=existing

Change-Id: I24c6732bf2b099af249fa5f461b1933b4259b708
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/272301
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
2022-12-14 09:25:57 +00:00
Johnni Winther cc35b9bcda [patterns] Handle nullability in StaticType for top/nullType
This updates the exhaustiveness implementation to have specific static
built-in types for nullableObject (the top) and its underlying nonNullableObject,
nullType and its underlying neverType. In the previous encoding, the top
wasn't nullable (if you queried the isNullable property) but was still
assumed to contain `Null` in other parts of the code.

With this change, the top space is now an ExtractSpace based on
StaticType.nullableObject, the empty space is an ExtractSpace based on
StaticType.neverType and record spaces are based on
StaticType.nonNullableObject.

The StaticType is now split into a StaticType interface and a
StaticTypeImpl implementation class for the non-built-in types. This
prepares for integrating the exhaustiveness checking with the analyzer
and CFE where the properties of the sub/supertype relation and fields of
the StaticType needs to be computed lazily.

Change-Id: I5a6919d7cba356f9bc8ac3f69fd3ac2b41319e9b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274020
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2022-12-14 09:21:27 +00:00
Johnni Winther 434b65470b [cfe] Rename *ViewBuilder to *InlineClassBuilder
Change-Id: I4f4c6d076c25efa71f9f346eedc9431d8f0b5afb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275420
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2022-12-14 08:41:10 +00:00
Johnni Winther 81845864ca [kernel] Rename View* to Inline*
TEST=existing

Change-Id: I8726c936261ceb770b489f264d14fff02a1b4998
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275243
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2022-12-14 08:36:57 +00:00
Nate Biggs 0ebed3f7d5 [dart2js] Make _call non-null in CallSiteTypeInformation nodes.
Change-Id: I114b772f72dc377ea1a8a3499318fe71f1ea56da
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275460
Commit-Queue: Nate Biggs <natebiggs@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
2022-12-14 02:20:21 +00:00
Stephen Adams d633b0a383 [dart2js] More records implementation
These are scattered changes to get to type inferrence.

- Add some impact tracking for used record types
- Add RecordTypeInformation and FieldInRecordTypeInformation
- Add a simple test to show inference is currently very conservative.

Change-Id: Icb81033b11588c1bddd01c8c5fcf69950fdb77e9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275161
Reviewed-by: Nate Biggs <natebiggs@google.com>
Commit-Queue: Stephen Adams <sra@google.com>
2022-12-14 02:20:18 +00:00
Jackson Gardner 1306a4c284 [dart2wasm] Add intrinsics for bitwise operations on booleans.
Change-Id: Ic09545535c954d72615ca035ed1b133fada5d733
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275080
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Jackson Gardner <jacksongardner@google.com>
2022-12-13 23:07:40 +00:00
Nate Biggs c15f248840 [dart2js] Fix linearization call tracking.
`null` was being included in the set of called nodes and this was causing members normally called once to not be inlined.

Change-Id: Ie42302e47691bb924dea1e54b82e08072c0ecd7b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275122
Commit-Queue: Nate Biggs <natebiggs@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
2022-12-13 22:23:17 +00:00
Brian Wilkerson 1aebb81274 Improve the error message produced by ThrowingAstVisitor
Change-Id: I4f4d725d52a244d9c37bc44802782f7d8e97ab9a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275400
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2022-12-13 21:56:05 +00:00
Sam Rawlins ea120b5d44 Remove all support for all 'strong-mode' analysis options
Fixes https://github.com/dart-lang/sdk/issues/50679

Change-Id: I3572faf51276f5c7551d35b7725c799567189413
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274921
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2022-12-13 21:32:24 +00:00