Commit Graph

89 Commits

Author SHA1 Message Date
Sigmund Cherem 4b7d256a06 Revert "Enable constant-update-2018 by default." and "Update .expect files in pkg/front_end after e9ca6a53"
This reverts commit e9ca6a5335 and d3e00fd35e.

Change-Id: I346d6156be19c4fceffa202a7ce9bfa931c7c14b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99560
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2019-04-16 20:20:12 +00:00
Dmitry Stefantsov d3e00fd35e Update .expect files in pkg/front_end after e9ca6a53
TBR=askesc@google.com

Change-Id: I65e263c7ee627f94bc314346a322953f9e954899
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99174
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2019-04-15 14:40:24 +00:00
Vyacheslav Egorov c9ecdabe5d Revert "Combine override checks and override-based inference in one phase"
This reverts commit 9db4119b67.

Revert "Change default of 'keepFields' in constant transformation to true"

This reverts commit b1e14cbe5f.

Revert "[fasta] Don't create forwarding stub if there's already a member"

This reverts commit 51da94da76.

These commits are reverted to unblock rolls into Flutter.

b1e14cbe5f is reverted because it contained
changes that prevented clean revert of the other CLs.

Change-Id: I8d3c00f0c1b146f4debe7f1a1a7de75be154e265
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97802
Commit-Queue: Alexander Aprelev <aam@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-03-25 19:40:26 +00:00
Peter von der Ahé 9db4119b67 Combine override checks and override-based inference in one phase
Change-Id: I2760f72f4eaa44bd192747179e843f017db30874
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97301
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-03-22 08:59:48 +00:00
Peter von der Ahé c9efa472da Remove instrumentTopLevelInference as it is redundant with expectation files
Change-Id: I1ce14796ba7d6976ae209f90f7c5f09226f3728e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97300
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2019-03-20 06:52:13 +00:00
Peter von der Ahé 57ac8b1ad9 Remove redundant instrumentation from tests and expectations.
Remove instrumentation for diagnostic messages, forwarding stubs and
covariance, since all this information is present in the expectation
files already.

Change-Id: Idf6622f7eddba801761e13666b470ae6dcc9d59b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97106
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2019-03-20 06:52:13 +00:00
Peter von der Ahé 6e1888af6b Circular type inference leads to InvalidType
Change-Id: I82c57a485b9293a05649b8420e7d78a2c2f922c9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97100
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2019-03-20 06:52:13 +00:00
Peter von der Ahé 479483ed13 Compute isGenericCovariantImpl in outline phase
Change-Id: I7ef6a39f66383a53c090cf5c47861cba84903271
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97084
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2019-03-20 06:52:13 +00:00
Peter von der Ahé 68aeb5cec2 Tweak error messages related to inference and overriding.
Change-Id: I216da55c0b5a6c6cc5b6f26f7a4565ae1e392c72
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96644
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2019-03-13 06:46:21 +00:00
Peter von der Ahé 6a65f84a63 Implement longest path to Object
Change-Id: Ibf882536dde5a218f5fda085359d419e3ee0d831
Reviewed-on: https://dart-review.googlesource.com/c/93410
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-02-19 11:24:05 +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é 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
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é a6e37888ee Merge legacy and disable inference modes
Change-Id: I05d402414e63cd70675b39e5a5976a4d97dd9d0d
Reviewed-on: https://dart-review.googlesource.com/c/85956
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-12-19 17:21:51 +00:00
Kevin Millikin 87f309463a Stop using asynchronous async in Fasta
Change all the places that still used old-style asynchronous async in
Fasta.  These were mostly in testing.

Change-Id: I102209aa54c7c6e658b9d6ec98167af62bf12f3e
Reviewed-on: https://dart-review.googlesource.com/c/87074
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2018-12-14 08:17:35 +00:00
Peter von der Ahé b3b6a53cd3 Remove ForInJudgment
Fixes https://github.com/dart-lang/sdk/issues/31790

Change-Id: I685fe1e769913e1bcfbd2eeda3655cdc14886dec
Reviewed-on: https://dart-review.googlesource.com/c/85949
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
2018-12-05 20:04:55 +00:00
Aske Simon Christensen 4427bb70bc Get rid of double colon notation for class members in messages.
Type variable bound violations on constructor/factory invocations
now mention just the class name (which is the one that has the type
variables) instead of the constructor/factory name.

Change-Id: I65330f1921451fef0157be01b4a5086855d80439
Reviewed-on: https://dart-review.googlesource.com/c/85291
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-11-29 13:27:16 +00:00
Aske Simon Christensen c959bd98af Print origins of types in bullet points below error messages.
This gets rid of the useless '#lib1::' prefixes on types in error
messages and instead adds a line to the error message for each
interface type appearing in the message stating where that type
originates.

Name clashes are disambiguated by appending markers like '/*1*/' and
'/*2*/' to the types whenever two interface types with the same name
appear in the same message.

The commonly used core types 'bool', 'num', 'int', 'double', 'String'
and 'Null' are excluded from the origin list unless they take part in a
name clash.

Change-Id: I017ea376d4f6ff2d4f3b36487774463f03bb3301
Reviewed-on: https://dart-review.googlesource.com/c/84604
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-11-29 13:27:16 +00:00
Peter von der Ahé 573a7c543f Rename strongMode to legacyMode in test suite
Change-Id: Id02e72dac031224c1c37cdde5a20fb19c0ebf6b5
Reviewed-on: https://dart-review.googlesource.com/c/84404
Auto-Submit: Peter von der Ahé <ahe@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
2018-11-14 09:32:15 +00:00
Peter von der Ahé bbb7cd9f4a Update type promotion expectations
Change-Id: Iac0a99debaf751a5496df954d3221260eac47f0f
Reviewed-on: https://dart-review.googlesource.com/c/84028
Commit-Queue: Peter von der Ahé <ahe@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-11-12 11:52:50 +00:00
Aske Simon Christensen 4794449ba6 Added some missing quotes to types in messages.
Change-Id: I68422f2b6fb5c89024fb521f180cbb141ea36187
Reviewed-on: https://dart-review.googlesource.com/c/80640
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-10-30 10:48:29 +00:00
Peter von der Ahé 5aa705776b Remove desugaredError
Change-Id: Ide688cb577457a642d989deb8d4c7c638274a1bc
Reviewed-on: https://dart-review.googlesource.com/c/80448
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2018-10-19 07:16:47 +00:00
Peter von der Ahé 097e8d86b8 Use context severity when calling onProblem
Change-Id: Id1aef8c9185e4d1e660cc342d54a12923a890a43
Reviewed-on: https://dart-review.googlesource.com/77060
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
2018-10-02 17:02:10 +00:00
Daniel Hillerström 98a9adf696 Make constructor function types conform with the specification.
Prior to this CL the return type of any constructor function was
always void. According to the specification §9.3 the return type of a
constructor function ought to be its enclosing class.

Change-Id: I70d76cc354b7f118ce96bf4954daf7fe535eb7be
Reviewed-on: https://dart-review.googlesource.com/76160
Commit-Queue: Daniel Hillerström <hillerstrom@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-09-26 09:39:11 +00:00
Peter von der Ahé 3831da8743 Include all problems in expectations
Change-Id: Ib9426243ae851bdf529f11d0d9b47c75679972fa
Reviewed-on: https://dart-review.googlesource.com/74760
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2018-09-19 08:34:43 +00:00
Vyacheslav Egorov f8a3d802d0 Revert "[vm/kernel] Preserve strong mode types in async transformation"
This reverts commit eec96f9076.

Revert "[vm/kernel] In async transformation check if strongMode is on."

This reverts commit 348ed30efd.

Reason for revert: getStaticType is unreliable in Kernel

R=alexmarkov@google.com

Change-Id: I08b914f947a00923491bb610ed74d6348882554f
Reviewed-on: https://dart-review.googlesource.com/75220
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2018-09-17 22:58:55 +00:00
Vyacheslav Egorov 348ed30efd [vm/kernel] In async transformation check if strongMode is on.
It seems we are still using non-strong mode targets in few
places (e.g. when training front-end server we by accident
train it in legacy mode).

A separate bug is filed to clean that up https://github.com/dart-lang/sdk/issues/34468

For now to unbreak the build we simply check if we are in the
legacy mode and then avoid using getStaticType in async
transformation.

This is followup to eec96f9076.

Bug: https://github.com/dart-lang/sdk/issues/34463
Change-Id: Ib693fddfb9abbf89599ae646cb408d4a9c93f1b6
Reviewed-on: https://dart-review.googlesource.com/75061
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-09-14 22:11:30 +00:00
Vyacheslav Egorov eec96f9076 [vm/kernel] Preserve strong mode types in async transformation
Async transformation uses dynamic variables in few places (e.g.
for temporaries and for incomming arguments) - which creates
not strongly typed AST with method invocations having dynamic
receivers and non-null interface targets at the same time.

To maintain strong typedness of the AST we insert unsafeCast
when accessing the temporaries.

Bug: https://github.com/dart-lang/sdk/issues/34463
Change-Id: I11e38c128645ebc8acb0c982a80fe4c5c4036673
Reviewed-on: https://dart-review.googlesource.com/75000
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-09-14 17:19:29 +00:00
Jens Johansen ac8fdb5a58 Add :controller_stream and call _asyncStarListenHelper
This changes how we step out of async* functions slightly to match how
Dart1 behaves.

Bug: #29158

Change-Id: I8ee2df5eee8167fd1907a6e9f30c9dc7ab6939b1
Reviewed-on: https://dart-review.googlesource.com/63625
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-02 06:49:47 +00:00
Jens Johansen 2e98da68f9 Call _asyncStarMoveNextHelper in kernel
This changes how we step into async* functions slightly to match how
Dart1 behaves.

Bug: #29158
Change-Id: I4969ca48f798bd51f9d2d5bc26dd224fa7eff627
Reviewed-on: https://dart-review.googlesource.com/63624
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-02 06:16:15 +00:00
Mike Fairhurst 5c9c90f7e1 Revert "Check void usage and invalid returns"
This reverts commit 11001793a2.

Reason for revert: Doesn't allow void to void assignment. This is breaks a lot of packages.

Original change's description:
> Check void usage and invalid returns
> 
> Closes https://github.com/dart-lang/sdk/issues/30470
> 
> Change-Id: I2ed5b54c74e0bba2771036774bbe2197ce29109d
> Reviewed-on: https://dart-review.googlesource.com/65141
> Commit-Queue: Peter von der Ahé <ahe@google.com>
> Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>

TBR=ahe@google.com,dmitryas@google.com

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

Change-Id: I78f479cf8b0824dd338ae43a5514f320fd112a3f
Reviewed-on: https://dart-review.googlesource.com/66040
Reviewed-by: Leaf Petersen <leafp@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2018-07-20 22:29:45 +00:00
Peter von der Ahé 11001793a2 Check void usage and invalid returns
Closes https://github.com/dart-lang/sdk/issues/30470

Change-Id: I2ed5b54c74e0bba2771036774bbe2197ce29109d
Reviewed-on: https://dart-review.googlesource.com/65141
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-07-18 10:18:52 +00:00
Konstantin Shcheglov 946be233f6 Use special error templates for for-in loops.
R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I7006468db607cf53d202b37c01913fb20bd722e7
Reviewed-on: https://dart-review.googlesource.com/65034
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-07-16 15:18:06 +00:00
Dmitry Stefantsov 48a258a4a5 [Fasta] Additional override checks
Checks override on fields and for methods with type parameters.

Bug: 32613
Change-Id: Ia32d1080959bc706fd72a075fb6ba724fa93fd58
Reviewed-on: https://dart-review.googlesource.com/64542
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-07-16 15:00:05 +00:00
Peter von der Ahé 149c5a0e0e Improve formatting of errors in golden files
Change-Id: I72930f0785b4b451c23e9cd2ebed2fa8290df760
Reviewed-on: https://dart-review.googlesource.com/63840
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2018-07-05 13:42:42 +00:00
Jens Johansen 1467909921 Call _completeOnAsyncReturn instead of .complete directly
The VM debugger expects _completeOnAsyncReturn to be called when
returning from an async function for stepping out of the async function
to work.

This CL does just that.

Note that `_completeOnAsyncReturn` only exists in the VM, but as
the async transformation is only run for the VM target that shouldn't
be a problem.

Change-Id: Id71344310de918f743dcb1ad66e165fc649516ba
Reviewed-on: https://dart-review.googlesource.com/63383
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-07-03 06:24:49 +00:00
Konstantin Shcheglov 7b68a4516f Wrap Let with ShadowSyntheticExpression in wrapInLocatedCompileTimeError().
So, that ExpressionStatementJudgment is created with an ExpressionJudgment, not with raw Let.

Change-Id: I648b1b6053b90b315064535237122be6289f8e6e
Reviewed-on: https://dart-review.googlesource.com/61105
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2018-06-20 15:44:44 +00:00
Alexander Aprelev e71bd048e5 [vm, kernel] Fix async stack code traversal in dart2.
With this change debugger requests yield(await) positions from kernel builder so it can confirm which frame handles what exceptions.
This also renames ':completer' to ':async_completer' in constructed kernel, so it is compliant with what VM expects to see(and updates test expectations accordingly).
Further it fixes async stack navigation for sync-async that became default in dart vm since first version went for the review((uses `future` getter, rather than property).
It also makes `future` getter non-debuggable to allow stepping-out of async methods.

Make Handle zone-scoped. Clean up frame counter var name.

Bug: https://github.com/dart-lang/sdk/issues/29056

Change-Id: Ia71f3c851a6b313655b57dad28c296f5dd081eda
Reviewed-on: https://dart-review.googlesource.com/54640
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-05-22 00:27:01 +00:00
Kevin Millikin 8dbe716085 Remove the unused GenericCovariantInterface bit
None of the back ends are using it and it imposes a cost to have to
compute it and try to preserve it.

Change-Id: I217e1191b535829021fa11f2698cadd8d4baf1c8
Reviewed-on: https://dart-review.googlesource.com/54383
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-05-09 15:04:43 +00:00
Dmitry Stefantsov 4f586e265e [fasta] Update expectation files after CL 50941
Change-Id: I85aba2501a7b8a911e122f0a802dfc21b7e87e1e
Reviewed-on: https://dart-review.googlesource.com/51620
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2018-05-08 10:53:47 +00:00
Kevin Millikin 9371ca061c Remove all the contravariance bits
Change-Id: Ib43b32d12749ddac0a93795cb5e8543eb5131dd9
Reviewed-on: https://dart-review.googlesource.com/52867
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Samir Jindel <sjindel@google.com>
2018-05-01 10:56:11 +00:00
Peter von der Ahé 1e312819ca Ensure errors guard erroneous expressions.
This changes wrapInCompileTimeError so we are certain that
compile-time errors are reported before the erroneous nodes.

We want to preserve erroneous nodes as, long term, this should help
with code completion.

Also introduce a located version as my next CL I'll have slightly
more accurate locations.

Change-Id: Id83d4b7a7d4fe260916816d72fac331251bad948
Reviewed-on: https://dart-review.googlesource.com/50422
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2018-04-12 14:51:19 +00:00
Samir Jindel 4289a9967b Check expected outputs of transforms.
Change-Id: I56ff4d4391b7a22d709dc60b696646895928e34c
Reviewed-on: https://dart-review.googlesource.com/46100
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-03-15 12:11:13 +00:00
Peter von der Ahé d359ce8650 Replace \n in expectation files with newline
Change-Id: Ia8444f7b817ac8e298c4f212f7aaa4fc6ba026b7
Reviewed-on: https://dart-review.googlesource.com/42682
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2018-02-21 17:02:07 +00:00
Paul Berry f299f2d00f Remove error code TOP_LEVEL_TYPE_ARGUMENTS, which is no longer used
Change-Id: Ic41373617a5c96906840ac49bc13825323b486c6
Reviewed-on: https://dart-review.googlesource.com/39560
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-02-07 14:41:42 +00:00
Jens Johansen c1160d8cfa [kernel] Change ast to text output to use synthetic instead of default
Change-Id: Ied8777df13aa0411daf89f3ad3ec6bdda7bb4898
Reviewed-on: https://dart-review.googlesource.com/35862
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-01-19 09:58:46 +00:00
Paul Berry eeb903499d Test more for-each downward inference corner cases.
Note that the annotation "/*@target=C::aField*/" is duplicated in the
test due to #31790.

Change-Id: Ie3cf2dea7efb9ae46310ee069a588feb37855201
Reviewed-on: https://dart-review.googlesource.com/32862
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-01-08 02:52:33 +00:00
Kevin Millikin 6fa813d818 Change handling of Kernel static errors
Before: Kernel static errors were represented by throwing a distinguished
error or else by calling a distinguished library const constructor.

Now: Kernel static errors are represented by InvalidExpression.  To support
error reporting, InvalidExpression has an optional message and a file
offset.  A back end can choose to signal these errors at any time; for
example, when deserializing the binary, or when compiling the procedure
containing the static error, or when the erroneous expression is evaluated
at run time.

InvalidStatement is removed because it can be encoded as ExpressionStatement
of InvalidExpression.

Future work:

* supporting static errors where an expression cannot appear in the AST
* allowing InvalidExpression to contain an Expression for error recovery
* adding a top-level list of static errors and warnings to the binary

Bug: https://github.com/dart-lang/sdk/issues/29840
Change-Id: Ifdfe9a76cee6cefed28061bf245be70531d2f413
Reviewed-on: https://dart-review.googlesource.com/31320
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-01-04 11:00:25 +00:00
Paul Berry 7b9025b407 Report errors when type inference fails due to a circularity.
Change-Id: I48e75d86140483d5f3b9c3ad17e47fe2dfdb722e
Reviewed-on: https://dart-review.googlesource.com/28361
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2017-12-11 21:24:13 +00:00
Paul Berry c800a1cc29 Fix error recovery for invalid assignment.
Previously, the front end recovered from an invalid assignment by
producing an "as" expression, e.g.:

    int x;
    String y;
    x = y;

Would produce an "invalid assignment" error, as well as this kernel
code:

    int x;
    String y;
    x = y as{TypeError} int;

The rationale was that the "as" check was guaranteed to fail, so this
code would produce a runtime error at the correct location.  However,
there were two problems:

1. (Minor problem) the "as" doesn't actually fail if the RHS is null.

2. (Major problem) for type inference, the type of an assignment
expression is defined to be the type of the RHS.  This means that if
the invalid assignment gets used for type inference, we generate
mal-typed kernel code, e.g.:

    int x;
    String y;
    var z = (x = y);

Gets compiled to:

    int x;
    String y;
    String z = (x = y as{TypeError} int);

This CL addresses both problems by changing the kernel representation
so that it evaluates the RHS and then throws an exception.  Since a
"throw" expression has type Bottom, the kernel representation is
guaranteed to be properly typed.  This also ensures that an exception
gets thrown if the RHS is null.  Finally, as a side bonus, it makes
the error-recovered kernel code more similar to the kernel code we
generate in other error recovery scenarios.

Change-Id: Iac74e0c726ce029ac0560d271413e85c15bfec5c
Reviewed-on: https://dart-review.googlesource.com/24140
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2017-12-04 14:38:04 +00:00