Commit Graph

1972 Commits

Author SHA1 Message Date
Kevin Millikin 0828d2c786 [Fasta] Implement exact types for Set literals
Set literals have an exact type of Set<T> for some T.  An implicit
downcast to a subtype is a static error.

Change-Id: I922b078b1b9e595243520e73c7130c23fe91f454
Reviewed-on: https://dart-review.googlesource.com/c/91640
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2019-02-05 07:43:52 +00:00
Peter von der Ahé 7fa0376af7 Implement subtype rules for Null in Fasta types
Change-Id: I5ca9e1b16a463ad8101139769b189f3e9d00c52c
Reviewed-on: https://dart-review.googlesource.com/c/91720
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-02-01 13:07:57 +00:00
Jens Johansen d9072d5272 Re-issue all problems in the incremental compiler
Prior to this change, old problems (warnings, errors, etc) would not be
re-issued for files not actually recompiled when recompiling.

As an example, not making any change and recompiling it would seem like
everything was good.

With this change, all problems should be issued again.

Change-Id: Ia410edba27438d8a2f1842d9f4d81d0592571101
Reviewed-on: https://dart-review.googlesource.com/c/91747
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-02-01 12:49:57 +00:00
Jens Johansen eb956a2516 Add synthetic bit to Library flags
Fasta can generate synthetic libraries.
Previously we didn't include them when serializing, but that leaves
references in the binary to libraries that doesn't exist which isn't
ideal.

This change includes them, and adds a flag to kernel Libraries such that
we know they are synthetic.

Change-Id: Ied25a21cd1f384d318347021bc7ec18dae3a4e05
Reviewed-on: https://dart-review.googlesource.com/c/91722
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-02-01 11:00:26 +00:00
Jens Johansen e9597684fe Fix for incremental compiler swallowing certain errors
Prior to this change, problems issued in hierarchy.mixinInferrer could
be swallowed up because it was reported through a wrong loader that
had already issued the error.

Change-Id: Iecbc180ca8a0bfaa73db202e4cba9755812d1e3b
Reviewed-on: https://dart-review.googlesource.com/c/91746
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2019-02-01 10:59:26 +00:00
Peter von der Ahé dd70ecd5c0 Substitute type variables when computing class hierarchy
Change-Id: Ic447c2ae8aaa0bc033749de68bc6a93f6e6fcb1e
Reviewed-on: https://dart-review.googlesource.com/c/90741
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-31 08:58:10 +00:00
Jens Johansen 71bee8f05e Fix serializing procdure when realClass is Object from dart:core.
Bug: 34224
Change-Id: I244ed3c15a2e134f1599588a156a7ff45917d4be
Reviewed-on: https://dart-review.googlesource.com/c/91641
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2019-01-30 08:44:05 +00:00
Peter von der Ahé f5fd281150 Prevent unsound promoted bounds from being used as arguments
Fixes https://github.com/dart-lang/sdk/issues/35100

Change-Id: I65f73f40d0ea970f0631599e01b177412fc32a40
Reviewed-on: https://dart-review.googlesource.com/c/90390
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-29 14:46:04 +00:00
Jens Johansen cf56801308 Garbage-collect compiled libraries
If - for instance - a file (say 'main.dart') tries to include a part
(say 'lib.dart') that is not part of that file (i.e. doesn't state
something like 'part of "main.dart"'), and the file ('lib.dart') is not
otherwise used, before this change, the library ('lib.dart') would be
included in the first comile, but on subsequent re-compiles wouldn't
include it because it's not referenced, nor ever cleaned up
(and would thus be re-compiled.)

This change garbage-collects the library as it's not referenced.

Change-Id: I8fa90b3ae6fc3d99af9fec780abe62855e653ddb
Reviewed-on: https://dart-review.googlesource.com/c/90385
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2019-01-29 14:25:44 +00:00
Peter von der Ahé 5fbf15d9c4 Mixins have no static members
Change-Id: I93b43ad2d58ab2804ed7deafeadb6346eade9eab
Reviewed-on: https://dart-review.googlesource.com/c/91481
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2019-01-29 09:54:52 +00:00
Jens Johansen 5cf4e543b8 Handle mis-included parts differently
If, for instance, including something that is not a part of the file
you include it from, previously we would copy things over anyway, and
other libraries wouldn't be able to use it
(for instance including it would fail).

Now, instead, we don't include it, structurally pretending the "part of"
line wasn't there (that is, we don't copy things over and other libraries
are free to include it).

As before, an error is given, but errors doesn't 'cascade' into other
libraries that (before this change) couldn't use the included file.

Change-Id: Ica6225c437ea7dd66f9e8955e638f442b2df8f97
Reviewed-on: https://dart-review.googlesource.com/c/90380
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2019-01-28 14:20:45 +00:00
Jens Johansen 42be4083bd Reproduction of dartbug.com/35715
Get an error saying something like
"The argument type 'dart.core::String' can't be assigned to
the parameter type 'dart.core::String'"

Change-Id: I327c613a2070495653e4089475a4f3edf550e9d4
Reviewed-on: https://dart-review.googlesource.com/c/91228
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-01-28 12:15:41 +00:00
Peter von der Ahé 15dc147226 Prevent serialization of synthetic kernel nodes
Change-Id: Iad2300d8fa5384b5d692c5598c9311e600427dd2
Reviewed-on: https://dart-review.googlesource.com/c/90003
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-24 18:55:44 +00:00
Peter von der Ahé 53b372f575 Test that shows leaking synthetic nodes
Change-Id: I8f68795380c1d6963203f9356244d2599be6c9cb
Reviewed-on: https://dart-review.googlesource.com/c/90002
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-24 18:55:44 +00:00
Peter von der Ahé 9d02ca176a Follow up to CL 88941
Change-Id: I17a9e62da9b23e84447d5d121477ccda2cfc2339
Reviewed-on: https://dart-review.googlesource.com/c/89581
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-23 08:41:50 +00:00
Dmitry Stefantsov 027d3d3c66 [kernel] Create empty (De)SerializationState in the verifier
Change-Id: Ie0af87d783a21b36949a288939b99ab45398543f
Reviewed-on: https://dart-review.googlesource.com/c/90383
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2019-01-22 12:10:06 +00:00
Peter von der Ahé 70b02ea06d Remove double synthetic wrap to fix crash in for-in
Fixes https://github.com/dart-lang/sdk/issues/35651

Change-Id: I80c07453cae3e4901785db65546a396bc99c3183
Reviewed-on: https://dart-review.googlesource.com/c/89515
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
2019-01-21 14:39:02 +00:00
Jens Johansen 865743a273 Include all non-dart and non-package libaries in fasta testing
Change-Id: Ied4ded0f601a5a2bf683cbc63cec724623b12796
Reviewed-on: https://dart-review.googlesource.com/c/90227
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-01-21 12:10:56 +00:00
Jens Johansen 1bad9304a0 Print user-imports and parts when printing ast to text
Also remove some duplicated code so libraries are mostly only printed
in one place.

Change-Id: I7cb86bff1938f05631d7eb3432deda2c9939f402
Reviewed-on: https://dart-review.googlesource.com/c/90226
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2019-01-21 12:10:16 +00:00
Peter von der Ahé b0017d758c Refer to correct locations in SDK (and other dill files)
Fixes https://github.com/dart-lang/sdk/issues/35559
Fixes https://github.com/dart-lang/sdk/issues/35558

Change-Id: I902273759c6d3076779ccf120a79fd972d939827
Reviewed-on: https://dart-review.googlesource.com/c/90181
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2019-01-18 12:37:24 +00:00
Peter von der Ahé 1a0367a373 Create test which demonstrates issues 35558 and 35559
Change-Id: I521ea3f7cf8d02f9e23edc1a9775fbd65bf64e4a
Reviewed-on: https://dart-review.googlesource.com/c/90180
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2019-01-18 09:44:18 +00:00
Jens Johansen e3302cdb8f Follow-up to storing problems in the ast
Change-Id: I2bfe8ad8d86806e0f5ffa026566cfa234b82154b
Reviewed-on: https://dart-review.googlesource.com/c/90005
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2019-01-18 07:15:36 +00:00
Dan Rubel ddce2824fa Add more spread collection fasta test cases
Change-Id: I998234da8f9e3f1e5902f8cd3fcad884c012f128
Reviewed-on: https://dart-review.googlesource.com/c/90080
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2019-01-17 20:29:47 +00:00
Peter von der Ahé 21c42e914e Compute supertypes
Change-Id: I85fd7894b026180b1bc418602c0f09fcfea0a543
Reviewed-on: https://dart-review.googlesource.com/c/89543
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-17 14:23:07 +00:00
Peter von der Ahé 3e24b60516 Hierarchy expectation files
These expectations will be used in a future CL.

Change-Id: I0e0659054732251452b32fedfd0ee52fac068f44
Reviewed-on: https://dart-review.googlesource.com/c/89524
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-17 14:23:07 +00:00
Peter von der Ahé ef2e000a52 Share expectation matching
Change-Id: I15e8d4c622a7980e170cf38e2ff57738ea57f01c
Reviewed-on: https://dart-review.googlesource.com/c/89521
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-17 14:23:07 +00:00
Peter von der Ahé f3cee0147c Fast versions of legacy and strong tests.
These versions don't run the VM on the generated .dill files.

These tests are still "Slow" in status-file lingo, as they run for
about 30 seconds on a fast machine.

Change-Id: I7bd326a14c8f1f1905d4c6b4d5f850a95b135325
Reviewed-on: https://dart-review.googlesource.com/c/88967
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2019-01-17 14:23:07 +00:00
Jens Johansen dab228e55f Save problems in ast - fasta changes
Change-Id: Id38f5e7495c245e5a7b161b55c58b8826c146a80
Reviewed-on: https://dart-review.googlesource.com/c/90000
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-01-17 10:46:13 +00:00
Peter von der Ahé ddc1de50d6 Use ClassHierarchyBuilder in all modes.
Change-Id: Ia4df46c2e9f6edc25274492c4a7ea85a4f4b95e1
Reviewed-on: https://dart-review.googlesource.com/c/88959
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-17 09:39:44 +00:00
Dan Rubel 1b0d93366d Add list literal spread collection fasta test cases
Change-Id: Ia17b7e1d4f97565a8ca7a93b1db35896d0f2f647
Reviewed-on: https://dart-review.googlesource.com/c/89700
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2019-01-17 01:32:15 +00:00
Peter von der Ahé 8ba2de2344 Sort context for conflicting inherited members
Change-Id: I3a1893c6ea268b4bb1518aa8f098b3524aa4f1ba
Reviewed-on: https://dart-review.googlesource.com/c/88957
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2019-01-16 15:46:22 +00:00
Peter von der Ahé 3f44bd1bf9 Check for conflicts in mixins
Change-Id: I5443508d8454b2c903b65e253ecda223485787ad
Reviewed-on: https://dart-review.googlesource.com/c/88945
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-15 14:41:04 +00:00
Peter von der Ahé aa59b20b4b Don't report conflicts twice
Change-Id: I9dca391da6a2afc747fcf73656ab0224201cb097
Reviewed-on: https://dart-review.googlesource.com/c/88943
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-15 14:41:04 +00:00
Peter von der Ahé 3ef8c296bd Improve detection of conflicts with inherited members and setters
Change-Id: Ifb2fc2ca2e3d812a8e2a56e4fc43c8cfd02f15d5
Reviewed-on: https://dart-review.googlesource.com/c/88942
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-15 14:41:04 +00:00
Peter von der Ahé 50fa633c4a Report InheritedMembersConflict correctly
Notice that no conflict is reported when an inherited
setter is in conflict with an inherited member. This is
implemented in a later CL.

Before we would only use InheritedMembersConflict when merging
interfaces, but as the new test cases demonstrate, that's not
sufficient.

Change-Id: I690dde1b59499d3ee0967b3f118b0b3b58898442
Reviewed-on: https://dart-review.googlesource.com/c/88941
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-15 14:41:04 +00:00
Peter von der Ahé 6e13f3334d Abstract noSuchMethod might not be an error.
Change-Id: Ie17371338a79d416f5bb8ccbae2b22cc2021a5b0
Reviewed-on: https://dart-review.googlesource.com/c/88835
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-14 13:06:30 +00:00
Aske Simon Christensen 1842020a69 Fix empty set/map literal disambiguation rule.
The criterion for an empty set/map literal without type arguments to
become a set literal was implemented as "superclass of Set and not
superclass of Map". This CL changes it to the rule now stated in the
spec: "subtype of Iterable and not subtype of Map".

Change-Id: I52d3a11e29ed9b1feb0f2b52a3f4beebe3833e31
Reviewed-on: https://dart-review.googlesource.com/c/88828
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-01-11 15:14:05 +00:00
Aske Simon Christensen 6a756ac040 Add front-end test for set/map literal disambiguation.
The test exposes three problems:

- The disambiguation criterion in the type inference is incorrect, as
  it infers a map when the context is a LinkedHashSet. This will be
  fixed in an upcoming CL.

- Assigning a map literal to a LinkedHashMap produces a static error
  ("isn't of expected type") due to exact types. Rules for exact types
  are currently unspecified, and the language team has expressed some
  interest in allowing this case. See also
  https://github.com/dart-lang/sdk/issues/33307

- Type arguments for the map literal are not inferred from the context
  when the outer context type is a LinkedHashMap. This is consistent
  between the CFE and analyzer. If the LinkedHashMap case is to be
  supported, this must be fixed as well.

Change-Id: I1519c844dae1f599306446c992cfe4825e4f20d4
Reviewed-on: https://dart-review.googlesource.com/c/88726
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-01-11 15:14:05 +00:00
Aske Simon Christensen 76be911f22 Enable set literals by default in the front-end tests.
Set literals can be disabled in individual suites by putting
"enableSetLiterals": "false" into the environment given to
FastaContext.create.

Also fixed a missing file offset on inferred empty set literals
which would trip up the front-end tests.

Change-Id: I76ad03e6ed03eb80045055f83fa0ab9acd62eed6
Reviewed-on: https://dart-review.googlesource.com/c/88722
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-01-11 15:14:05 +00:00
Peter von der Ahé c3b13ae5c1 Collect abstract members immediately instead of counting.
This simplifies diagnosing missing implementations, especially, the
ones inherited from interfaces.

Change-Id: I13705eee07960974a111d78f1eb986e77d27a468
Reviewed-on: https://dart-review.googlesource.com/c/88719
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-11 12:45:43 +00:00
Peter von der Ahé c41611d35b Add non-final fields to setters
Change-Id: Ib42064cf762dae6eb0ff5bda4459ce69a9f78b26
Reviewed-on: https://dart-review.googlesource.com/c/88717
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-11 12:45:43 +00:00
Kevin Millikin 944984f015 [Kernel] Add syntax for unevaluated constants
Add Kernel syntactic support for constants constructed by
bool.fromEnvironment, int.fromEnvironment, and String.fromEnvironment.
These values are not necessarily available at compile time.  Because
constants can depend on these values, there is also an unevaluated constant
that represents an expression depending on environment values.

This syntax is not yet produced by the Fasta compiler.

Change-Id: Ie96ea7f60a7efcd35ac802b320a00f398d41232e
Reviewed-on: https://dart-review.googlesource.com/c/88827
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2019-01-11 08:35:20 +00:00
Jens Johansen 705701951a Small cleanup in incremental compiler
Change-Id: I4ea16c95e6406b7bea73669d159c83c4c23b9802
Reviewed-on: https://dart-review.googlesource.com/c/88700
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-01-10 10:14:11 +00:00
Kevin Millikin a7b23e1cb5 [Kernel] Add text serializers for some invocations
Add serializers for instance getters, setters, and methods and for
super getters, setters, and methods.  This requires also serializing
Arguments.

Change-Id: I36d36892bf896cd12b48f9e77395c0584daf47f1
Reviewed-on: https://dart-review.googlesource.com/c/88710
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
2019-01-09 09:43:31 +00:00
Dmitry Stefantsov 113ca50ba3 [kernel] Add a step to fasta unit tests to check text serialization
Change-Id: I8d945fc9d75aad1c4275b6d3dd3f9e2ea884ea9f
Reviewed-on: https://dart-review.googlesource.com/c/88451
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-01-08 10:31:42 +00:00
Peter von der Ahé f3677bb2e7 Merge interfaces when building hierarchy
Change-Id: I2d3db2fa653a4caa9f90bdc8557d80f5a2836a52
Reviewed-on: https://dart-review.googlesource.com/c/87641
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-01-07 13:50:16 +00:00
Dmitry Stefantsov 7778a8b6ca [kernel] Start setting up test suite for round-trip serialization
Change-Id: I00920c41a5eaa99a7cc3eececff1caac94b1c1c9
Reviewed-on: https://dart-review.googlesource.com/c/88184
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2019-01-04 16:05:26 +00:00
Peter von der Ahé ff10e5dd22 Class Hierarchy Builder
A new approach to building the class hierarchy based on
Declarations/Builders. The new approach is that we perform
all kinds of override checks while building the hierarchy.

This is the first step of many, and it only builds the
hierarchy for class members (including superclasses, but not
interfaces).

The checks implemented so far are missing implementations,
and conflicts (can't override a method with a setter).

As I plan to reimplement most of Dart 2.0 semantics using a
bottom-up approach to type inference based on legacy mode,
I've changed the severity of MissingImplementationNotAbstract.

Change-Id: I002e0d0000aabe1623349d0c8119ca577c80ad01
Reviewed-on: https://dart-review.googlesource.com/c/87581
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2019-01-03 10:43:45 +00:00
Dmitry Stefantsov 4579863064 [fasta] Handle type parameters of supertypes in type arguments checks
Closes #35470.

Bug: http://dartbug.com/35470
Change-Id: I6b7ae9bb96ca099dc55bfdc8fddfa768eab060a2
Reviewed-on: https://dart-review.googlesource.com/c/87965
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Auto-Submit: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-12-27 11:17:24 +00:00
Peter von der Ahé 26faa44d41 Fix error in incremental test
Change-Id: Ib1fd314bfae714935687f971a7c7d102c28998f4
Reviewed-on: https://dart-review.googlesource.com/c/87640
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2018-12-21 09:49:24 +00:00