Commit Graph

6018 Commits

Author SHA1 Message Date
Paul Berry 4c507af684 Create an implementation of InferenceNode to infer a field type from its initializer.
Change-Id: Ib96734b3ef3a448a106b12ea4d874397bd2d903e
Reviewed-on: https://dart-review.googlesource.com/12842
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-11 00:25:36 +00:00
Paul Berry 650816fd26 Trigger top level type inference resolution by member lookup.
Every time we look up a member during type level type inference, we do
so because we need the type of the looked up member.  So rather than
look it up and then trigger its type to resolve, we simply resolve it
as part of the lookup.

Change-Id: I0428649fbc99966dae1c0c3a04b6c5e4f680c9ab
Reviewed-on: https://dart-review.googlesource.com/12840
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-10 23:55:36 +00:00
Paul Berry aa99974ec8 Create an implementation of InferenceNode for method inference.
Change-Id: I591d5637216a08cff2e764a05fc3501d3f3432e6
Reviewed-on: https://dart-review.googlesource.com/12822
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-10 23:19:16 +00:00
Paul Berry 5f37d7a7d4 Move inference of setter return types outside the other type inference logic.
It doesn't make sense to use the full type inference machinery for
setting the return types of setters to `void`.  Just do it directly in
the builder.

Change-Id: Ia20671b17b77c758519f813d40285d9795fea6ea
Reviewed-on: https://dart-review.googlesource.com/12743
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-10-10 23:03:52 +00:00
Paul Berry feccb794a2 Don't attempt to query the setter type of a non-setter.
Fixes #31031.

Change-Id: I1a82f7a3da31ad89d0303232977a64ddd546898c
Reviewed-on: https://dart-review.googlesource.com/12781
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-10 21:39:14 +00:00
Paul Berry 0ab8dba6fb Create a base class InferenceNode to be used by all type inference logic.
AccessorNode is changed to inherit from InferenceNode, and the logic
for coping with circularities is moved into the base class (with some
refactoring).

Change-Id: Ie505e40f2ede344a168878759bba05aa704e0c4b
Reviewed-on: https://dart-review.googlesource.com/12740
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-10-10 21:00:52 +00:00
Paul Berry fff1bff0a8 Remove unused classes DependencyCollector and DependencyCollectorImpl.
Change-Id: Ie77f7f9e7e7374daae0d028a4b095bff0c1bf155
Reviewed-on: https://dart-review.googlesource.com/12720
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-10 19:10:13 +00:00
Paul Berry 9545cf6e2f Check for SyntheticAccessor in _requiresTypeInference.
This will be necessary once we start doing type inference on fields in
InterfaceResolver.

Change-Id: If363ba4d2b3b42efd3fa7975a94e29286882d5ab
Reviewed-on: https://dart-review.googlesource.com/12620
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-10 16:03:16 +00:00
Paul Berry 655d3ce665 Account for forwarding nodes when looking up inherited members in InterfaceResolver.
This allows covariance information to propagate properly between
classes and avoids creation of unnecessary forwarding stubs.

Change-Id: Ib55c62adb74d16f94282e752e387634086001946
Reviewed-on: https://dart-review.googlesource.com/12600
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-10 15:55:14 +00:00
Aske Simon Christensen 2f9d4efff6 Produce error statement for return with value from generator
Introduces a handleInvalidStatement method in listeners to signal
that the previous statement was invalid.

Closes https://github.com/dart-lang/sdk/issues/29983
Change-Id: I08d69062aa626a554b88d11d2c8c0e31b0abbe28
Reviewed-on: https://dart-review.googlesource.com/11501
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2017-10-10 08:34:21 +00:00
Paul Berry 8d02be26db Override fileOffset and fileUri in SyntheticAccessor.
This is necessary because we will need to consult fileOffset and
fileUri in order to make covariance annotations.

Change-Id: I989393cd3f66c0875b4e8e091c7a8d7523a08b20
Reviewed-on: https://dart-review.googlesource.com/12422
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-10-10 04:56:41 +00:00
Paul Berry 8455c13e75 Rework access to ShadowClass._inferenceInfo.
Two changes:

- ShadowClass.getClassInferenceInfo now accepts an ordinary class, and
  returns `null`.  This will allow us to ensure that if a ShadowClass
  gets re-used later as an ordinary Class (which sometimes happens
  during incremental analysis), it will behave the same as an ordinary
  Class.

- We don't create ShadowClass._inferenceInfo at the time of
  ShadowClass creation; we wait until a builder is stored.  This will
  allow ShadowClass objects with no inference info to be easily
  created in unit tests.

Change-Id: I0dd2d65b0c477b069ec36872c13b19ba8ebbd021
Reviewed-on: https://dart-review.googlesource.com/12382
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-10-10 04:52:41 +00:00
Paul Berry 9799028747 Resolve inherited accessors before computing forwarding stubs.
This is necessary because the need for a forwarding stub may be
affected by the types of inherited accessors, and the types of
inherited accessors may need to be determined by type inference.

Change-Id: I160cf21186485d2572301f3cda8621ede517c47b
Reviewed-on: https://dart-review.googlesource.com/12400
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-10-10 03:45:47 +00:00
Paul Berry c33b17d9ae Store _isImplicitlyTyped in ShadowField.
Previously we were using the presence or absence of an AccessorNode to
determine whether the field was implicitly typed.  But AccessorNode is
going to go away soon, so we need a boolean.

Change-Id: I7ef5bfb8be25f753fa674472b72d7bef0d3a2baf
Reviewed-on: https://dart-review.googlesource.com/12380
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-10 01:43:18 +00:00
Paul Berry 6d202e7ea6 Split finishTopLevel into two phases.
Soon, inference of instance fields will be unified with the logic for
creating forwarding stubs.  When this happens, we will need the order
of inference to be:

1 Finish top level inference of static fields.

2 Finish top level inference of other fields, and create forwarding stubs.

3 Finish top level inference of initializing formals.

Currently, (1) and (3) are performed by the same method,
finishTopLevel().  Splitting it into two methods allows us to put (2)
in between.

Change-Id: I70e1a47e8ad604bdb8f0348c54d6017c0a0b57b5
Reviewed-on: https://dart-review.googlesource.com/12381
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-10 01:23:42 +00:00
Sigmund Cherem 1149e7a39a Remove the strong-mode note
Bug: https://github.com/dart-lang/sdk/issues/31044
Change-Id: I54261f046ff86b0c972fb090f87c8440c59ddfe4
Reviewed-on: https://dart-review.googlesource.com/12322
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2017-10-09 18:20:35 +00:00
Peter von der Ahé 2080faff8c Remove stale references to patched_dart2js_sdk/platform.dill.
Change-Id: I8b7b4274ef64f0b6f6c5a31ba654e8fb44843161
Reviewed-on: https://dart-review.googlesource.com/12283
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2017-10-09 14:36:55 +00:00
Paul Berry a5d461fbf5 Move instrumentation of top level inferred types to a later pass.
This will simplify integrating top level type inference with the
InterfaceResolver, since the instrumentation logic won't have to be
migrated.

Change-Id: I89a23888d92622549c493249fd3d98c6ee5af8da
Reviewed-on: https://dart-review.googlesource.com/12124
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-06 23:07:47 +00:00
Paul Berry 830e68e72d Test whether forwarding stubs handle default arguments correctly (they don't)
This test demonstrates issue #31027.

Change-Id: I2d9e8464b0304e1d41ddc775e8b5ffd37b6e8655
Reviewed-on: https://dart-review.googlesource.com/11141
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-10-06 22:38:46 +00:00
Sigmund Cherem 80e7d3b35f Build a strong version of outline.dll, and use it for front end strong mode tests.
(rebases CL 11366 after Peter's changes)

Change-Id: If9f3d331fb953a9890fa7952bd472cc39f541e84
Reviewed-on: https://dart-review.googlesource.com/11965
Reviewed-by: Paul Berry <paulberry@google.com>
2017-10-06 20:12:59 +00:00
Paul Berry 12fa3effa2 Set transformer flag appropriately for forwarding stubs.
Also extend the verifier so that we won't make mistakes like this
again in the future.

Change-Id: Idbdf02dabed8b8cf86cb0b8a1fc08080338b9709
Reviewed-on: https://dart-review.googlesource.com/11961
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-10-06 18:03:28 +00:00
Konstantin Shcheglov 31a3c9f466 Add reset() to IncrementalKernelGenerator.
R=ahe@google.com, paulberry@google.com, sigmund@google.com

Bug: https://github.com/dart-lang/sdk/issues/31021
Change-Id: I6fffe2979cecdeca91a2582f26ce24449c9a3b79
Reviewed-on: https://dart-review.googlesource.com/11962
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2017-10-06 17:49:01 +00:00
Peter von der Ahé 16aa720d27 Remove compiling platform.dill from patch_sdk.dart
This separates compiling platform.dill files from the patch_sdk.dart
script. The motivation for that is that I'm working on reading patch
files directly from Fasta, so we can completely remove the build step
for generating patched_sdk and dart2js_patched_sdk.

Short-term this should allow Paul to add a strong-mode version of
platform.dill without causing to many conflicts with my work on
patches.

Change-Id: I1150845b2986348d4fffe27092701d8a9b57ea54
Reviewed-on: https://dart-review.googlesource.com/11506
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2017-10-06 15:34:37 +00:00
Brian Wilkerson de47e633cb Add a synthetic begin token for use in error recovery
Change-Id: I72a97b866b67b97a03b2f87c3b8a75219c97b29d
Reviewed-on: https://dart-review.googlesource.com/11762
Reviewed-by: Dan Rubel <danrubel@google.com>
2017-10-06 15:28:37 +00:00
Vyacheslav Egorov 8ee26d8a19 [kernel] Make TypeEnvironment.strongMode into a field instead of getter.
This allows creating strong mode TypeEnvironments without actually subclassing
it.

Make SubtypeTester.isBottom treat Null as Bottom in strong mode.

Bug:
Change-Id: Icdd1a4b736ce0fe839a6ef30cf24487111f32d25
Reviewed-on: https://dart-review.googlesource.com/11882
Reviewed-by: Paul Berry <paulberry@google.com>
2017-10-06 15:14:36 +00:00
Paul Berry abf6f29d14 Simplify technique for circularity detection during type inference.
We don't need to supply the dependent node every time we call
inferAccessorFused; we can just let TypeInferenceEngine keep track of
which type inference node (if any) is currently being inferred.

Change-Id: I75b222ce038ad31c196aeb9c33b315731f4f1c52
Reviewed-on: https://dart-review.googlesource.com/11700
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-06 14:25:35 +00:00
Jens Johansen 58eba86481 [kernel] AsyncForInStatements fileOffset is now on await
Bug:
Change-Id: Ie20f92cd64a771169c69ce2e841648ddef5e4ee4
Reviewed-on: https://dart-review.googlesource.com/11860
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2017-10-06 10:31:19 +00:00
Brian Wilkerson cf6fff1880 Rework the way AstBuilder finds documentation comments
Change-Id: Id3bdb6c68fdbf5c878da77feeb99907ada76ff0d
Reviewed-on: https://dart-review.googlesource.com/11261
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
2017-10-06 00:05:23 +00:00
Paul Berry 039f82f7ed Include generic covariance annotations for type parameters in kernel output.
This was inadvertently left out of f94d3950ad.

Change-Id: Ifc3bbd8358322e112bf6b57fc751570d6101c9b6
Reviewed-on: https://dart-review.googlesource.com/11561
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-05 21:40:53 +00:00
Paul Berry 1f0d2aa65d Remove old type inference logic from front_end.
Change-Id: I451c9a06466fb1836dd502f0d7b5c565403f0ce9
Reviewed-on: https://dart-review.googlesource.com/11646
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-05 21:37:32 +00:00
Paul Berry 0d931bb75f Take forwarding stubs into account when performing type inference.
Change-Id: I5e6af73ee59458d9324bc48bfb47c06e437cb836
Reviewed-on: https://dart-review.googlesource.com/11644
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-05 21:31:10 +00:00
Paul Berry b73bcd932f Merge top level type inference of methods into InterfaceResolver.
Type inference of methods now occurs during
SourceLoader.prepareTopLevelInference.  Since this method visits
classes in class hierarchy order, we no longer need special logic to
ensure that base classes are inferred before derived classes.

Change-Id: Idf9f67226005bee6986d026c255e83926b4253d6
Reviewed-on: https://dart-review.googlesource.com/11560
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-10-05 19:05:11 +00:00
Brian Wilkerson 2220f21e40 Preserve comments when rewriting the token stream
Change-Id: I76dc76dfcace7b4d0802f961879e26d6a6133170
Reviewed-on: https://dart-review.googlesource.com/11300
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2017-10-05 17:29:50 +00:00
Paul Berry 1c9c8110bb Add testing code to enable easier debugging of forwarding stub logic.
The testing code is disabled by default.  In can be enabled by
changing the value of a const bool.

Change-Id: I1756d2e00adb8695d04bcd6427148b5fe0b5d1dc
Reviewed-on: https://dart-review.googlesource.com/11540
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-05 17:04:04 +00:00
Paul Berry cdbd085119 Handle a forwarding stub corner case.
This CL handles the case where a class overrides a concrete method
with an abstract one, but forwarding stub logic determines that a
concrete method is needed.  In this case we don't need to create a
full forwarding stub; we just need to add an implementation to the
abstract method that already exists.

We annotate this case as `/*@forwardingStub=implementation*/`.

Change-Id: Id0b0c6f84f666161f17942d3b4d7afc115c615f5
Reviewed-on: https://dart-review.googlesource.com/11367
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-05 16:47:10 +00:00
Dan Rubel bc64539b68 Fix import recovery
Revise import directive recovery to use a recovery listener
similar to class header recovery.

Change-Id: I83e941d7c5ace144404b182d3fac208eda920867
Reviewed-on: https://dart-review.googlesource.com/10760
Reviewed-by: Peter von der Ahé <ahe@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2017-10-05 11:49:51 +00:00
Paul Berry f94d3950ad Include generic covariance annotations in kernel text output.
Change-Id: I81a7b3ea692e94d7e9bbd8562f1771a7626e0715
Reviewed-on: https://dart-review.googlesource.com/10803
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2017-10-05 05:23:43 +00:00
Paul Berry 6fce6ba854 Modify InterfaceResolver to resolve non-accessors earlier.
We only need to retain long-lived forwarding nodes for getters and
setters; methods and operators can be resolved immediately, since
their resolution can't depend on top level type inference of
initializers.

This should help speed up InterfaceResolver by reducing the number of
long-lived objects it leaves in the heap.

Change-Id: I05f8d5ed1c12968f4382d43ae23955171cdbfc05
Reviewed-on: https://dart-review.googlesource.com/11241
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-10-05 05:17:16 +00:00
Dan Rubel efeaa0eab3 Class header recovery
This updates the fasta parser to handle out of order clauses
in the class header similar to analyzer.

Also:
* Fix parseTopLevelDeclaration in parser test proxy
* Fix parseStuff to correctly update token stream
* Extract skipUnexpectedTokenOpt
Change-Id: Ic20c0ab1355e866aa241c591ceeada390890c46a
Reviewed-on: https://dart-review.googlesource.com/9880
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2017-10-04 21:33:09 +00:00
Sigmund Cherem 7bbea1e8db change incremental_perf.dart to use a smaller example and only compile dart2js once. This should reduce the time spent on this test.
Change-Id: I5d6b034887cd636f1d893788a59ed2ad62d9413a
Reviewed-on: https://dart-review.googlesource.com/9793
Commit-Queue: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2017-10-04 19:25:10 +00:00
Peter von der Ahé e7f26dc769 Improve handling of qualified names.
Change-Id: I02d7cb034c268303bd51fc43f4e0d809f346e8d2
Reviewed-on: https://dart-review.googlesource.com/10500
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2017-10-04 18:34:49 +00:00
Alexander Markov 9ee73fe322 [Kernel] Remove outdated and duplicated front-end Targets
This CL replaces outdated VmTarget and FlutterTarget with VmFastaTarget
and FlutterFastaTarget. 'Fasta' suffix is droped from target names.

The new FlutterTarget extends VmTarget, so they share more code.

Change-Id: Id79956698a889c9a49b8a67914f1f96a731407ab
Reviewed-on: https://dart-review.googlesource.com/9423
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2017-10-04 18:02:49 +00:00
Brian Wilkerson a212f20a9a Generate a parser error when an enum declaration is empty
Change-Id: I459a329f2e1a3cb7ad52f4a1e79d717d2afeb49f
Reviewed-on: https://dart-review.googlesource.com/10661
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2017-10-04 17:33:39 +00:00
Paul Berry 7c82b747f8 Actually store forwarding stubs in Class objects.
Change-Id: I3792688a61cdba49b38a8da7f27e9b305fa7a54e
Reviewed-on: https://dart-review.googlesource.com/10704
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-10-04 17:30:49 +00:00
Brian Wilkerson e9a849a7d6 Add synthetic semi-colon when missing after expression statement
Change-Id: Id14fb60c56790c83358b4c026770e0c691841908
Reviewed-on: https://dart-review.googlesource.com/10721
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2017-10-04 15:19:33 +00:00
Peter von der Ahé b43fd6dd80 Update exclude patterns for testcases.
Change-Id: I738c1a42941dc4fb734394b4d7308a856b805088
Reviewed-on: https://dart-review.googlesource.com/10880
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2017-10-04 13:04:16 +00:00
Peter von der Ahé 26fa9353db Clean up handling of invalid types.
Change-Id: Ied3595ac0ee1c5e164ca888504ae252d121e458f
Reviewed-on: https://dart-review.googlesource.com/10863
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2017-10-04 10:42:43 +00:00
Peter von der Ahé cda4f284b0 Implement warnings on unresolved this-sends.
Change-Id: Ia9ab202e157102c22b2705d13582d3529288f81e
Reviewed-on: https://dart-review.googlesource.com/8502
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2017-10-04 08:21:32 +00:00
Peter von der Ahé 086f389959 Implementation options with expiration date.
Change-Id: Ie71ca21fb37a036f32fe8ee3348e95ee02089ac7
Reviewed-on: https://dart-review.googlesource.com/9542
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2017-10-04 07:47:52 +00:00
Régis Crelier 23b57df3e1 Postpone addition of 'typeArguments' getter on Invocation class until the
Dart 2.0 revision of the core library, since it breaks google3 Dart integration.

Change-Id: If9036f6e8d90b30f142a245ae16754c177f8461e
Reviewed-on: https://dart-review.googlesource.com/10702
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
2017-10-03 23:28:02 +00:00