Commit Graph

56224 Commits

Author SHA1 Message Date
Peter von der Ahé 3e61365696 Add --legacy-mode option.
This is a step towards removing the option --strong-mode because
it's supposed to be on by default.

Change-Id: I25da0038d12e359f9c628beb2f92293295f00185
Reviewed-on: https://dart-review.googlesource.com/39983
Reviewed-by: Jens Johansen <jensj@google.com>
2018-02-15 09:54:20 +00:00
Peter von der Ahé 5d8a9e8403 Rework command-line option parsing to enable default values
Change-Id: I3e53f38e6f242351c0f41b85fbad534c00663f9e
Reviewed-on: https://dart-review.googlesource.com/39982
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2018-02-15 09:27:17 +00:00
asiva b9039cd35b - Fix const ness in signature of new API function
- Access snapshot contents using the getter

Change-Id: I9c264c2bf8ab20ee1d3431e4b802e14fa92616c2
Reviewed-on: https://dart-review.googlesource.com/41642
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-02-15 09:11:04 +00:00
Lasse R.H. Nielsen 06439147c4 Update some tests to work better.
Add test for strong-mode only allowing super-chaining at the end of the initializer list.

Change-Id: Ic1c99f4f24738094eec14cb9c59354716f776b1e
Reviewed-on: https://dart-review.googlesource.com/40301
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-02-15 08:43:34 +00:00
Vyacheslav Egorov c2899e424f [vm/kernel/aot] Keep type checks in setters for covariant fields
Fixes issue instroduced by 286b123d35

Change-Id: I10444a7ecbb5c03e052df720f3dc1694983e6423
Reviewed-on: https://dart-review.googlesource.com/41263
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-02-15 07:21:32 +00:00
asiva f1543c38ee Adjust Dart_IsDart2Snapshot API to not expect a size argument as the size
is part of the snapshot header.

Change-Id: I4b6cf3b78c122b406e09fe4234a8ea8ce81b4986
Reviewed-on: https://dart-review.googlesource.com/41641
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-02-15 07:12:34 +00:00
kmillikin 3d05042639 Remove the different runtime sections for dartdevk
It's no longer necessary to guard against $runtime != none in most
cases because running test.py with --runtime=none will treat runtime
failure expectations as Pass.

Change-Id: Ieaff9957ad951066d93a3303af5499c7655d67a6
Reviewed-on: https://dart-review.googlesource.com/41567
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-02-15 01:38:44 +00:00
Ben Konyi 5716109abd [VM / Hot-Reload] Fixed tests that were failing due to different failure messages generated by the VM parser and CFE.
Change-Id: I6840c993300b3ba36c44bfc8f5c0ce6b8043d6f7
Reviewed-on: https://dart-review.googlesource.com/41571
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
2018-02-15 01:03:04 +00:00
Ben Konyi 0fd6aa87a3 [VM / Hot-Reload] Treat fields with null initializers as having no initializer set during reload.
Change-Id: I685f6944ca27fd680e4d912877a922125d7d7ca5
Reviewed-on: https://dart-review.googlesource.com/41568
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-02-15 00:26:33 +00:00
Dmitry Stefantsov 28887cc851 Update more dart2js status after landing ec9c927b18
Change-Id: If2e302e0e840f6cb1aa9076c8d854e55d36cba90
Reviewed-on: https://dart-review.googlesource.com/41266
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2018-02-15 00:15:10 +00:00
Jenny Messerly b371ed5db3 fix #32140, locals shadowing constructor/catch params
This gets DDC and DDK to handle the block body of functions/methods in a
similar way, eliminating it from the JS if it is not necessary, and fixes
a bug in DDC for cases where we do need to emit a nested block scope.

Change-Id: I37d3d69bfcf9b1204385cca7785601fb7d6edfc3
Reviewed-on: https://dart-review.googlesource.com/41565
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Jenny Messerly <jmesserly@google.com>
2018-02-14 23:43:13 +00:00
Dmitry Stefantsov 81dca893b1 Update status files: some tests pass due to ec9c927b18
Change-Id: I87588883cdbe8f724ff519c1968b583f03e32f69
Reviewed-on: https://dart-review.googlesource.com/41265
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2018-02-14 23:38:27 +00:00
asiva 9884447cc5 Add a new API function to sniff a snapshot to determine if the
snapshot is a Dart2 snapshot or a Dart1 snapshot.
This will be used by the flutter engine to initialize itself
correctly based on the snapshot provided.

Change-Id: I06adaac74b350f96aa6ebb55887e4a81f09fbd14
Reviewed-on: https://dart-review.googlesource.com/41082
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2018-02-14 23:27:38 +00:00
Sigmund Cherem 4436877ab2 More changes to make bots happy
R=efortuna@google.com

Change-Id: If0407436d204d9668a0ed13bf5fe2d36a0e041a9
Reviewed-on: https://dart-review.googlesource.com/41563
Commit-Queue: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Emily Fortuna <efortuna@google.com>
2018-02-14 23:09:34 +00:00
Brian Wilkerson f5942a5ce0 Add support for analyzing analysis options and pubspec files
Change-Id: I2aa05e5822b2993d0f1e903396c816b52e2292b4
Reviewed-on: https://dart-review.googlesource.com/41566
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-02-14 22:50:05 +00:00
kmillikin b019045393 Front-end implementation of mixin type inference.
Infer missing type arguments to generic mixin classes in mixin
applications based on mixin supertype constraints.  The implementation
directly follows the draft feature specification at
https://dart-review.googlesource.com/c/sdk/+/38940.

Bug: https://github.com/dart-lang/sdk/issues/31984
Change-Id: I7caba037b1b0e73c44f71aaa958f3ff3e8f3c1f0
Reviewed-on: https://dart-review.googlesource.com/40661
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2018-02-14 22:43:24 +00:00
Mike Fairhurst 85973b9a54 Simplify analysis server's excluded file handling
Change-Id: I30bc19e7c185cb3dffbe5b84d0bd3f7b5b6f585b
Reviewed-on: https://dart-review.googlesource.com/41562
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2018-02-14 22:25:54 +00:00
Dmitry Stefantsov ec9c927b18 Resolve type arguments of redirecting factories invocations
Fixes #32068

Change-Id: Ifc2c832d5a761ae51b7f93084543aa04902a9529
Reviewed-on: https://dart-review.googlesource.com/40280
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-02-14 22:03:23 +00:00
Sigmund Cherem 50db95f69b Fixes for CSP: status lines and some test fixes.
These failures started showing up when we switched to use chrome instead of DRT
for CSP tests.

Change-Id: I53b70ce18eaef73e720e10fdac05245953131f7c
Reviewed-on: https://dart-review.googlesource.com/41480
Reviewed-by: Emily Fortuna <efortuna@google.com>
Commit-Queue: Sigmund Cherem <sigmund@google.com>
2018-02-14 21:54:53 +00:00
Régis Crelier 3d756ec4ab [VM runtime] In strong mode, restrict subtyping rules of callable instances (fixes #32154).
Update kernel status files.

Change-Id: I2bf6097b5229d80cc90baed92fd8dcc750667b23
Reviewed-on: https://dart-review.googlesource.com/41482
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-02-14 21:48:27 +00:00
Mike Fairhurst 470f28e3c6 Fix #31345 include analysis_options breaks some properties
Bug: 31345
Change-Id: I8d588cc49931ccb4699cc33c8e12a7f701a0a513
Reviewed-on: https://dart-review.googlesource.com/41500
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2018-02-14 21:32:44 +00:00
Janice Collins 121a8ebcb2 Prepare for analyzer 0.31.2-alpha.0.
Update changelog and versions prior to publish, primarily for the crash
in computeNode fixed by https://github.com/dart-lang/sdk/commit/3791ddb496a2d8c9ed9bc2edcc62e562c2e47eb2#diff-ff9cb85838db7a802ac5aa9c55f26d86.

Change-Id: If3bbe3238fb622d884cee5df87a06a90b401fe7e
Reviewed-on: https://dart-review.googlesource.com/41040
Commit-Queue: Janice Collins <jcollins@google.com>
Reviewed-by: Kevin Moore <kevmoo@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-02-14 21:22:54 +00:00
Leaf Petersen 0eee1fe110 Roll deps for async and web_socket_channel to published versions
Change-Id: I68ce38997c40ca539bc0946e7e268c0fd495e16d
Reviewed-on: https://dart-review.googlesource.com/41541
Reviewed-by: Natalie Weizenbaum <nweiz@google.com>
2018-02-14 21:06:55 +00:00
Konstantin Shcheglov 425e07d721 If selection in 'Extract Method' does not cover any node, extract the smallest covering expression.
Two comments.

1. We need also to change the Dart plugin for IntelliJ to not select
   the whole line when selection if empty. The whole line is almost
   never a good choice for Flutter.

2. This is not fully consistent with "Extract Lolal" where we give the
   client the list of possible expressions to extract and the user can
   then choose. Here we use just the smallest one. If we want to make
   it consistent, we will need to enchance the protocol and the plugin.

R=brianwilkerson@google.com, devoncarew@google.com

Change-Id: I87a752234d9c825d78a6d787d2b21d1b252166c2
Reviewed-on: https://dart-review.googlesource.com/41520
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-02-14 20:43:13 +00:00
Régis Crelier 933a0ae895 [Kernel] Check return type of native functions in strong mode (fixes #32090).
[VM] Check return type of all functions in strong mode.

Change-Id: I01ff80e9ec5c625a0855a22498f9c2d738de4678
Reviewed-on: https://dart-review.googlesource.com/40641
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-02-14 20:30:43 +00:00
pq be4040214c Enable @override completion contributions.
See: https://github.com/flutter/flutter-intellij/issues/1110
Change-Id: Iaddb5e9818f737889a484f562febcb4ca72d1017
Reviewed-on: https://dart-review.googlesource.com/41483
Commit-Queue: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-02-14 20:23:59 +00:00
Konstantin Shcheglov b5cb793fbd Convert unresolved 'children:' into 'child:'.
R=brianwilkerson@google.com, devoncarew@google.com

Change-Id: I3ea3f8a8be2e942a3fd00060519a7dbfeae6fb36
Reviewed-on: https://dart-review.googlesource.com/41481
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-02-14 20:23:43 +00:00
Ross Wang 879431330e Bumping protobuf version to ^0.7.0
Fuchsia is including some dart proto code that expects protobuf 0.7.0.

Change-Id: Ie42a3751a2d3a7e51e759b9913d0901ecefafc70
Reviewed-on: https://dart-review.googlesource.com/40480
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-02-14 19:28:23 +00:00
Konstantin Shcheglov 4232ac99e8 Fix for surround-with linked edit positions.
R=brianwilkerson@google.com

Bug: https://github.com/dart-lang/sdk/issues/32106
Change-Id: Ia899171aa38dd1283b72cdd100a0f5b678e9b565
Reviewed-on: https://dart-review.googlesource.com/41420
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-02-14 18:55:33 +00:00
Erik Ernst c01d59bc7e Adjusted generalized-void.md to make for-in on a void iterator an error, except when the iteration variable has type void.
A similar rule applies to asynchronous for-in loops.

Change-Id: I88ba234c27a38167eaac0350d269e88894a0fe9e
Reviewed-on: https://dart-review.googlesource.com/35920
Reviewed-by: Leaf Petersen <leafp@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Commit-Queue: Erik Ernst <eernst@google.com>
2018-02-14 18:44:03 +00:00
Brian Wilkerson ae5534a394 Handle cases where a non-dart file is being edited (issue 32160)
Change-Id: Icd7d1ff0ecb4515163281c9a85a1b1927e864fbe
Reviewed-on: https://dart-review.googlesource.com/41400
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-02-14 18:27:33 +00:00
Dan Rubel 577fc049d8 Update fasta parser recovery tests
Change-Id: Ie2116e9c99c615238199542a147c7240f31fb659
Reviewed-on: https://dart-review.googlesource.com/41101
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-02-14 18:01:14 +00:00
Dan Rubel dd0a08a75e Improve fasta parser error reporting
This CL updates the fasta parser to report more errors
and have improved recovery. The new errors reported include:

* IllegalAssignmentToNonAssignable
* MissingAssignableSelector
* StaticConstructor

In addition, a number of test expectations were updated
to match the errors already produced by the fasta parser.

Change-Id: I99889e8e64663ca5b81a5d5d8f5e5241d049a0a2
Reviewed-on: https://dart-review.googlesource.com/41100
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-02-14 18:01:14 +00:00
Brian Wilkerson a83bcc8235 Check for unresolved imports too avoid breaking when handling optional new and const (issue 32150)
Change-Id: Ia7cc162e0e615ce324acb230e1d0bbf59d89ffa1
Reviewed-on: https://dart-review.googlesource.com/41380
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-02-14 17:42:13 +00:00
Alexander Markov c823888580 [vm] Avoid setting result type to dynamic for recognized methods
The list of recognized methods in the VM includes information about
result type. If there is no known/concrete result cid, the list
contains dynamic. When StaticCallInstr for recognized method is created,
its result type was pulled from the list even if it was dynamic.

This change avoids setting result type to dynamic in such case
and fixes the assertion for conflicting result types from the list of
recognized methods and from global type inference.
Now, if list of recognized methods has dynamic, and inferred type
is available, the latter will be used.

Change-Id: I7da7313f93ca08a142226026a4645124c30cfd8f
Reviewed-on: https://dart-review.googlesource.com/41080
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-02-14 17:29:23 +00:00
Brian Wilkerson 75a2a1524f Support updated optional new and const spec
Change-Id: I974185eba4936f14d7b9d5d1d5c1638a37624c62
Reviewed-on: https://dart-review.googlesource.com/41024
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-02-14 17:12:13 +00:00
Devon Carew 7579c58fad Rename 'Add widget padding' to 'Add padding'.
Change-Id: I9483e4ed3abe5ccad000b04ed7fe1098ac977e90
Reviewed-on: https://dart-review.googlesource.com/41320
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Devon Carew <devoncarew@google.com>
2018-02-14 16:50:53 +00:00
Zach Anderson 98a42402cc Revert "[infra] Use wheezy sysroot for local builds on linux."
This reverts commit 4678cdaa24.

Reason for revert: This broke gcc arm builds.

Original change's description:
> [infra] Use wheezy sysroot for local builds on linux.
> 
> I had though that this is how things already worked, but it wasn't.
> 
> Change-Id: Iaa6b4e7d9e791f3fad29431c5715fcb19df8a76b
> Reviewed-on: https://dart-review.googlesource.com/40840
> Reviewed-by: Siva Annamalai <asiva@google.com>
> Commit-Queue: Zach Anderson <zra@google.com>

TBR=rmacnak@google.com,zra@google.com,asiva@google.com

Change-Id: I013fe2d3736acdcb8ce7d1ec959419f20aa0aa54
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/41340
Reviewed-by: Zach Anderson <zra@google.com>
2018-02-14 16:41:45 +00:00
Zach Anderson 3b2e4076d3 Revert "[infra] Fix asan build"
This reverts commit 41eef1cbb5.

Reason for revert: Backing out to revert:
[infra] Use wheezy sysroot for local builds on linux.

Original change's description:
> [infra] Fix asan build
> 
> Change-Id: Ib5b1efbf12bdf7455e2c9d32c37ce5a06ed3195b
> Reviewed-on: https://dart-review.googlesource.com/41000
> Reviewed-by: Zach Anderson <zra@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Commit-Queue: Zach Anderson <zra@google.com>

TBR=rmacnak@google.com,zra@google.com

Change-Id: Ica54f78a98784aa7e1b40f8c7e113298606255c9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/41341
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-02-14 16:41:29 +00:00
Vyacheslav Egorov 286b123d35 [vm/kernel/aot] Remove type checks from non-dynamically-invoked implicit setters
This applies optimization from d117760 to implicit setters.

(This CL also reformats kernel_binary_flowgraph.cc because some previous CL
was pushed without proper formatting)

Bug: https://github.com/dart-lang/sdk/issues/31798
Change-Id: I6f1590bfd40e36b972b857c49d6ce8435bb25187
Reviewed-on: https://dart-review.googlesource.com/41300
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-02-14 16:24:03 +00:00
Lasse R.H. Nielsen 7ca47924ad Fix status to mark crash.
Change-Id: I141e5b2eb3960caefaab34e39d8591cf20cfbc90
Reviewed-on: https://dart-review.googlesource.com/41262
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
2018-02-14 15:27:33 +00:00
Paul Berry c4de71ede2 Re-land "Change front_end handling of callable classes."
Original description:
Change front_end handling of callable classes.

This CL is the first in a series of CLs to change the handling of
callable classes in Dart 2.0.

For purposes of this description, a "callable class" is a class whose
interface contains a `.call` method.

In Dart 1.0, a callable class was considered to be a subtype of the
`.call` method's function type.  This allowed the user to create
custom objects with similar behavior to closures, but with additional
fields and methods.

In Dart 2.0, a callable class is just an ordinary class, with no
subtype relation to any particular function type.  (Note however that
it is still permissible for a class to declare that it "implements
Function").

To reduce the amount of code broken by this change, a piece of
syntactic sugar is being added: if an expression whose static type is
a callable class appears where a function type is expected, an
implicit tear-off of the `.call` method is inserted.

Note that it is still possible at compile time to invoke an expression
whose static type is a callable class, and it is still possible at
runtime to invoke an expression whose runtime type is a callable
class; in both cases, this is considered an implicit invocation of the
class's `.call` method.  This is unchanged from Dart 1.0 behavior.

This CL introduces test cases for the new behavior, and implements the
implicit tear-off of `.call` in the front end.

Still to be implemented in future CLs:

- Spec text needs to be written.

- DDC/analyzer code needs to be written to perform implicit tear-offs
  of `.call`.

- The subtyping algorithm in DDC, analyzer, VM, and dart2js needs to
  be changed so that callable classes are no longer considered
  subtypes of any particular function type.

- A small corner case involving type parameters still needs to be
  addressed (see TODO in
  pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart).

Fixes #32064.

Change-Id: I0d397c608321e25ba42cc02aa8a516aa77aa7c9d
Reviewed-on: https://dart-review.googlesource.com/41280
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-02-14 15:22:25 +00:00
Paul Berry d2b2d9f692 Stop testing co19 using the analyzer.
Non-strong semantics are no longer supported in the analyzer.  Testing
the old (non-strong) co19 suite with the analyzer just leads to
unnecessary status file churn.

Change-Id: I490dd9fee9a7916184c09c27883f8e7c1df5486c
Reviewed-on: https://dart-review.googlesource.com/41201
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-02-14 14:51:24 +00:00
Paul Berry e2bdbb8bb8 Revert "Change front_end handling of callable classes."
This reverts commit f0a6330db0.

Reason for revert: Broken bots

Original change's description:
> Change front_end handling of callable classes.
> 
> This CL is the first in a series of CLs to change the handling of
> callable classes in Dart 2.0.
> 
> For purposes of this description, a "callable class" is a class whose
> interface contains a `.call` method.
> 
> In Dart 1.0, a callable class was considered to be a subtype of the
> `.call` method's function type.  This allowed the user to create
> custom objects with similar behavior to closures, but with additional
> fields and methods.
> 
> In Dart 2.0, a callable class is just an ordinary class, with no
> subtype relation to any particular function type.  (Note however that
> it is still permissible for a class to declare that it "implements
> Function").
> 
> To reduce the amount of code broken by this change, a piece of
> syntactic sugar is being added: if an expression whose static type is
> a callable class appears where a function type is expected, an
> implicit tear-off of the `.call` method is inserted.
> 
> Note that it is still possible at compile time to invoke an expression
> whose static type is a callable class, and it is still possible at
> runtime to invoke an expression whose runtime type is a callable
> class; in both cases, this is considered an implicit invocation of the
> class's `.call` method.  This is unchanged from Dart 1.0 behavior.
> 
> This CL introduces test cases for the new behavior, and implements the
> implicit tear-off of `.call` in the front end.
> 
> Still to be implemented in future CLs:
> 
> - Spec text needs to be written.
> 
> - DDC/analyzer code needs to be written to perform implicit tear-offs
>   of `.call`.
> 
> - The subtyping algorithm in DDC, analyzer, VM, and dart2js needs to
>   be changed so that callable classes are no longer considered
>   subtypes of any particular function type.
> 
> - A small corner case involving type parameters still needs to be
>   addressed (see TODO in
>   pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart).
> 
> Fixes #32064.
> 
> Change-Id: I6a86491047ae467a5e767cb3cc7cecb570b29308
> Reviewed-on: https://dart-review.googlesource.com/40508
> Commit-Queue: Paul Berry <paulberry@google.com>
> Reviewed-by: Kevin Millikin <kmillikin@google.com>
> Reviewed-by: Leaf Petersen <leafp@google.com>
> Reviewed-by: Erik Ernst <eernst@google.com>

TBR=paulberry@google.com,lrn@google.com,leafp@google.com,dmitryas@google.com,eernst@google.com,kmillikin@google.com

Change-Id: Ia3d3a6e46ceee2b2c55938bec95d09d50bbf06a7
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/41240
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-02-14 13:10:54 +00:00
Lasse R.H. Nielsen fed7120b07 Make UnmodifiableMapView not lose unmodifiability on cast/retype.
Change-Id: I44c084353b35e16cd2fd5481d86a7be6c0b62ef3
Reviewed-on: https://dart-review.googlesource.com/41160
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Stephen Adams <sra@google.com>
2018-02-14 12:49:23 +00:00
Paul Berry 421db9c69c Re-land "Implement proper checking for callability of Function class."
(was reverted in https://dart-review.googlesource.com/c/sdk/+/40980
due to an analyzer bot breakage)

Original commit message:
Implement proper checking for callability of Function class.

There was some old (incorrect) logic for doing this, behind the flag
enableStrictCallChecks.  This flag has been removed, since the new
behavior is now standard in Dart 2.0.

Fixes #31509

Change-Id: Ice5cf38bbc648badf7f2563ff930b69f9a799635
Reviewed-on: https://dart-review.googlesource.com/41120
Reviewed-by: Jonas Termansen <sortie@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-02-14 11:30:23 +00:00
Jens Johansen 90a7599d05 [vm] Make mint constants use hash set instead of plain list.
This the second part of fixing #32077 - dealing with mints.

Example:
The runtime of a program adding 100,000 different mints to
a list and prints the last one:
Before: ~12.5 seconds
Now: ~1.2 seconds.

Change-Id: Iad6da1749886bab4e4d3941748cdbab51661c2c3
Reviewed-on: https://dart-review.googlesource.com/41161
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-02-14 11:25:42 +00:00
Erik Ernst 9f9987f709 It is now an error to have void foo() { return 42; }
The language team several times agreed to make it an error when a
non-void expression `e` is used in `return e;` in the body of a
function whose return type is `void`.

When `void` is changed from a near-bottom type to a top type, the
wording in the language specification (dartLangSpec.tex) does _not_
ensure that this is an error, because all types are assignable to
`void`, so we need a specific rule saying that it is an error.

This CL adds such a rule to the feature spec for generalized void.
It also adds a rule that makes it an error to have return type `void`
in a function marked `async*` or `sync*`, based on the reasoning
that they "are returning a Future/Stream/Iterable semantically",
and it would now be an error if they did that explicitly.

Change-Id: I22fed9e9fc6097bb50100a151b964045e41ef173
Reviewed-on: https://dart-review.googlesource.com/35680
Reviewed-by: Leaf Petersen <leafp@google.com>
Commit-Queue: Erik Ernst <eernst@google.com>
2018-02-14 11:15:12 +00:00
Jens Johansen 90f3a603cd [gardening] kernel/windows status file updates #4
Change-Id: I7c938730c245f74c06e938f31ed2cdedf6db6e62
Reviewed-on: https://dart-review.googlesource.com/41180
Reviewed-by: Jens Johansen <jensj@google.com>
2018-02-14 11:10:26 +00:00
Paul Berry f0a6330db0 Change front_end handling of callable classes.
This CL is the first in a series of CLs to change the handling of
callable classes in Dart 2.0.

For purposes of this description, a "callable class" is a class whose
interface contains a `.call` method.

In Dart 1.0, a callable class was considered to be a subtype of the
`.call` method's function type.  This allowed the user to create
custom objects with similar behavior to closures, but with additional
fields and methods.

In Dart 2.0, a callable class is just an ordinary class, with no
subtype relation to any particular function type.  (Note however that
it is still permissible for a class to declare that it "implements
Function").

To reduce the amount of code broken by this change, a piece of
syntactic sugar is being added: if an expression whose static type is
a callable class appears where a function type is expected, an
implicit tear-off of the `.call` method is inserted.

Note that it is still possible at compile time to invoke an expression
whose static type is a callable class, and it is still possible at
runtime to invoke an expression whose runtime type is a callable
class; in both cases, this is considered an implicit invocation of the
class's `.call` method.  This is unchanged from Dart 1.0 behavior.

This CL introduces test cases for the new behavior, and implements the
implicit tear-off of `.call` in the front end.

Still to be implemented in future CLs:

- Spec text needs to be written.

- DDC/analyzer code needs to be written to perform implicit tear-offs
  of `.call`.

- The subtyping algorithm in DDC, analyzer, VM, and dart2js needs to
  be changed so that callable classes are no longer considered
  subtypes of any particular function type.

- A small corner case involving type parameters still needs to be
  addressed (see TODO in
  pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart).

Fixes #32064.

Change-Id: I6a86491047ae467a5e767cb3cc7cecb570b29308
Reviewed-on: https://dart-review.googlesource.com/40508
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2018-02-14 11:03:32 +00:00