Commit Graph

237 Commits

Author SHA1 Message Date
Aske Simon Christensen e9818eefd8 Update analyzer status about type parameters on constructors.
Change-Id: I3e7a48b608246dc512e415d8b6a11e16ac42e48f
Reviewed-on: https://dart-review.googlesource.com/57824
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Aske Simon Christensen <askesc@google.com>
2018-06-01 15:28:22 +00:00
Aske Simon Christensen 4fb6395058 Report error when a constructor has type parameters.
Fixes https://github.com/dart-lang/sdk/issues/30678
Fixes https://github.com/dart-lang/sdk/issues/33110

Change-Id: I7d3fcd56d408fefce7a0b43ffd68cc5427eb0940
Reviewed-on: https://dart-review.googlesource.com/57507
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-06-01 12:48:09 +00:00
Dmitry Stefantsov 00f75adfaf Emit a compile-time error on incorrect types of initializing formals
Fixes #32526.

Bug: http://dartbug.com/32526
Change-Id: I1e4738937ade7592f7fb1d16bf485ad4ccd077c2
Reviewed-on: https://dart-review.googlesource.com/46801
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-05-31 13:31:42 +00:00
Mike Fairhurst 891efdca59 Fix status file for analyzer.
It seems like the "missing" analysis error is a strong mode error, so I
don't think the error should even appear without strong mode turned on?

In any case, a "missing" error for non strong users is not something I
would expect to be blocking. Better to fix the build

Change-Id: I5f56b5847b655b501e8146200ab4b84fddbf21cc
Reviewed-on: https://dart-review.googlesource.com/56600
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-05-24 17:38:58 +00:00
Mike Fairhurst 1d59ab22ce Fix #29014, make function type parameters invariant.
With the restricted behavior, some tests have been removed, modified,
and added based on the new invariance.

Bug: 29014
Change-Id: I086749bbe40aaa723009f9ae06f58d85554cae53
Reviewed-on: https://dart-review.googlesource.com/56029
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2018-05-24 07:56:29 +00:00
Lasse R.H. Nielsen a4494a7fb2 Make mixin and interface built-in identifiers.
Fixes #33113

Bug: http://dartbug.com/33113
Change-Id: I4b0b7c9d82ae9df6a7e9f71168ca981c62c7a2f1
Reviewed-on: https://dart-review.googlesource.com/55222
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-05-18 09:57:17 +00:00
Aske Simon Christensen 4bcb23c2af Status file update
Change-Id: I7a24a113b26470468bb3a4ed3af216f7019964d4
Reviewed-on: https://dart-review.googlesource.com/54884
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2018-05-14 11:31:16 +00:00
Aske Simon Christensen f5130108ea Some triage of missing compile-time errors in Fasta
Change-Id: Ia7601f7296e2da66ca234a94c57105c366d94a06
Reviewed-on: https://dart-review.googlesource.com/52800
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Karl Klose <karlklose@google.com>
2018-05-14 10:18:17 +00:00
Jens Johansen 22c80a4e14 Test for constructor having type parameter
Change-Id: I766ac78f087b3396c5bf09d92fce55b381cda1ef
Reviewed-on: https://dart-review.googlesource.com/54391
Reviewed-by: Erik Ernst <eernst@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-05-14 09:16:17 +00:00
Kevin Millikin 8f6c6c2a8e Implement some missing override checking
Detect the following conflicts:

  - declaring a method and inheriting a setter or getter with the same
    name

  - declaring a getter or setter and inheriting a method with the same
    name

  - inheriting both a method and a getter or setter (or both) with the
    same name

Declaring a method and a getter with the same name is already
detected.  Declaring a method and a setter with the same name is not
yet detected, because it should be done in the same way as
method/getter declaration conflicts.

Bug: https://github.com/dart-lang/sdk/issues/32613
Change-Id: I2d168894453d7032372388faa0872d3fc7aa9ef7
Reviewed-on: https://dart-review.googlesource.com/53803
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2018-05-08 13:40:51 +00:00
Jenny Messerly e10f0717d2 fix test status for a few tests changed in 3002e47e
In particular:
super_call4_test/01
mirrors/deferred_constraints_constants_test

Change-Id: I8b0a32c4ce760e757f94d0d82b0b3123c55c3551
Reviewed-on: https://dart-review.googlesource.com/54163
Reviewed-by: Jenny Messerly <jmesserly@google.com>
2018-05-08 01:04:47 +00:00
Jenny Messerly 3002e47e36 cleanup language_2 and corelib_2 tests that import dart:mirrors
Preserves tests that didn't really need mirrors, and moves tests for
mirror functionality into lib_2/mirrors tests.

Change-Id: Ie16dee1a4b508e3f14da53499f57c5dae2d1e513
Reviewed-on: https://dart-review.googlesource.com/49624
Commit-Queue: Jenny Messerly <jmesserly@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2018-05-07 23:50:56 +00:00
Paul Berry 8f52be2282 Don't infer types when there's an irreconcilable type mismatch.
Also fix the type inference algorithm so that when it explores
multiple alternatives (as a result of the use of FutureOr<>), if one
alternative generated some constraints but failed to produce a match,
it rewinds those constraints and tries the other alternative.
(Previously, it erroneously assumed that if any constraints were
generated, the alternative matched successfully).

Also add unit tests to verify the proper operation of the subtype
match algorithm.

Fixes #32305.

Change-Id: I060b5d6d5247a68d2b27bba78819bae172e43d97
Reviewed-on: https://dart-review.googlesource.com/53685
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Jenny Messerly <jmesserly@google.com>
2018-05-03 23:27:14 +00:00
Bob Nystrom c448d35ee5 Update prefix test statuses on analyzer.
Change-Id: I26dd3fb632a2eb0c74bffa4852436e4955e15dc6
Reviewed-on: https://dart-review.googlesource.com/53520
Reviewed-by: Devon Carew <devoncarew@google.com>
2018-05-02 22:33:54 +00:00
Bob Nystrom bed71b7776 Migrate and clean up the prefix negative tests.
Since there were already non-negative tests with the same numbers, I
gave them meaningful names.

Merged a couple of tests into the same file when it made sense since
multitests let us do that.

Deleted prefix1_negative_test, because it essentially tested only that
a random identifier does not resolve, which is not particularly related
to prefixes.

Change-Id: I91718f6df5126f123d9a8ea3abbc6898797db2db
Reviewed-on: https://dart-review.googlesource.com/52985
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2018-05-02 16:05:25 +00:00
Bob Nystrom 162d6c3b0c Turn label negative tests into multitests.
Found two mistakes in the tests:

- label2_negative_test had no labels whatsoever.
- label8_negative_test called an undefined function, doAgain().

Change-Id: I4d17c969a2b1422ff96cf68996225ecaaf5fe829
Reviewed-on: https://dart-review.googlesource.com/52868
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2018-04-27 23:14:17 +00:00
Bob Nystrom 881e35ee82 Migrate library_negative_test.
In the process, I discovered multitests can't handle imports to
non-existent libraries. So I fixed that and cleaned up the code.

Change-Id: I9a8557e84f91ba7858bdf98f8732cd0ded55aa1a
Reviewed-on: https://dart-review.googlesource.com/52869
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2018-04-27 22:28:27 +00:00
Aske Simon Christensen 9c2fcedaf4 Error on missing method implementation in non-abstract class
Bug: https://github.com/dart-lang/sdk/issues/32013

Change-Id: I163a84e70e94852a05ce99b07ec883c610ea788c
Reviewed-on: https://dart-review.googlesource.com/52320
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-04-24 13:07:54 +00:00
Brian Wilkerson 712193bf77 Attempt to fix bots
Change-Id: I24ee05fcd567eaab47854ef0bb21e54bbc6ee7c7
Reviewed-on: https://dart-review.googlesource.com/52162
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-04-20 17:41:29 +00:00
Aske Simon Christensen f06118ef8f Dart 2 fixes to various tests.
All fixes are related to the requirement that a concrete class must
implement its entire interface or have a non-trivial noSuchMethod
implementation.

Change-Id: I015e0565e5dd9cfa324c38bb43696e365c58329a
Reviewed-on: https://dart-review.googlesource.com/51880
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-04-20 12:57:19 +00:00
Aske Simon Christensen 2b09c1efc0 Revert "Error on missing method implementation in non-abstract class"
This reverts commit 7cc55d0372.

Reason for revert: More test fixes needed.

Change-Id: Ib36159184ffbd14ce3f7cca184ce2b8cdfec237c
Reviewed-on: https://dart-review.googlesource.com/51680
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Aske Simon Christensen <askesc@google.com>
2018-04-18 17:27:22 +00:00
Aske Simon Christensen 7cc55d0372 Error on missing method implementation in non-abstract class
Closes https://github.com/dart-lang/sdk/issues/32013

Change-Id: I8f49d2640ef92a3d9d723969208cdb5f397e806d
Reviewed-on: https://dart-review.googlesource.com/43660
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-04-18 14:39:09 +00:00
Leaf Petersen c2b338f1b7 Remove fuzzy arrow support from analyzer
Fixes #31637

Change-Id: I87767b92814455187ea71cc4caca786043dbbe3d
Reviewed-on: https://dart-review.googlesource.com/51100
Commit-Queue: Leaf Petersen <leafp@google.com>
Reviewed-by: Jenny Messerly <jmesserly@google.com>
2018-04-13 16:47:16 +00:00
Alexander Thomas 3851591642 [infra] Keep comments intact when updating status files.
* Preserve empty lines in the file header.
* Add empty entry to the tool's newly created sections.
* Remove extra empty line at the end of the file.

Change-Id: I271583774d5f5497025a9d85bcadf8b0b9e39e81
Reviewed-on: https://dart-review.googlesource.com/37600
Commit-Queue: Alexander Thomas <athom@google.com>
Reviewed-by: William Hesse <whesse@google.com>
2018-04-10 19:03:21 +00:00
Sigmund Cherem 52896af2bb Fix analyzer bot: missing status line for new test in !$strong
TBR

Change-Id: Ie6088dac55ea56a052fbaaf012c625c3c1ea6614
Reviewed-on: https://dart-review.googlesource.com/49829
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Sigmund Cherem <sigmund@google.com>
2018-04-06 04:10:10 +00:00
Sigmund Cherem 0284fdab6b dart2js: allow as expressions in constants
The CFE doesn't allow them explicitly yet, but implicit casts do show up by the
time we see them in dart2js.

Closes https://github.com/dart-lang/sdk/issues/32773

Change-Id: Idb566625ce7c8edc74a4eea0109491bd72357051
Reviewed-on: https://dart-review.googlesource.com/49801
Commit-Queue: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Stephen Adams <sra@google.com>
2018-04-06 00:46:30 +00:00
Jenny Messerly bed5debbeb Callable object support in Analyzer and DDC.
Fixes #32156
Fixes #32157
Fixes #32426

This also fixes `implements Function` so it has no effect in Dart 2
(it is ignored for the purposes of subtyping.)

Change-Id: Ibec9c77cd516b8b97fef68a579998598d0acf8c6
Reviewed-on: https://dart-review.googlesource.com/45141
Commit-Queue: Jenny Messerly <jmesserly@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2018-03-30 18:14:55 +00:00
Paul Berry 506ac7f953 Rework linker type inference using ExprBuilder.
This CL changes the way linker type inference works.  Instead of
walking the operations in an UnlinkedExpr in order and inferring types
directly, it first builds an AST for the expression using ExprBuilder,
then uses ResolverVisitor to resolve the AST and perform type
inference.

This helps ensure that summary type inference and ordinary AST-based
type inference produce the same result, since they now use the same
core algorithm.  In particular, this means that summary type inference
now does downwards inference properly.

Since the ResolverVisitor makes greater use of the element model than
the rest of the linker, this required implementing additional methods
in the linker's element model.

This CL includes some minor fixes to ExprBuilder that were uncovered
during testing.  It also contains some minor changes to
ResolverVisitor to make it work during linking.

Fixes #32525.
Fixes #32394.

Change-Id: I5ec9b2bf5565ad30b8cc856475334323dc118da8
Reviewed-on: https://dart-review.googlesource.com/48741
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-03-29 17:16:39 +00:00
Dmitry Stefantsov 2fcdfc1f23 Rename bug32353{,_2}_test.dart to issue32353{,_2}_test.dart
Change-Id: Id00f2713dda2fcb62d43d5f7f2034b8f09bb12c1
Reviewed-on: https://dart-review.googlesource.com/46020
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2018-03-12 10:50:17 +00:00
Brian Wilkerson 7a0b6f8f4a Fix the analyzer bots
Change-Id: I707211ea0698c4b684e13caccb099e3fdcc66409
Reviewed-on: https://dart-review.googlesource.com/45940
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-03-10 00:20:08 +00:00
Paul Berry 021a29d68f Move analyzer-specific status lines into language_2_analyzer.status
Change-Id: Ib1f7be60c9e5e14e0794e31ca5747f2f409e0a94
Reviewed-on: https://dart-review.googlesource.com/45525
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-03-08 14:55:17 +00:00
Paul Berry 440b58d644 Start running analyzer tests with --preview-dart-2.
The changes to the CQ bot should take effect immediately.  The changes
to the other bots will take effect once those bots are switched over
to use the test matrix.

Change-Id: Ibfe59817a11f730fd1847cdc60b3244b4a71a480
Reviewed-on: https://dart-review.googlesource.com/45300
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-03-07 15:04:33 +00:00
William Hesse dc0f4c840c Fix status of map_literal1_test on analyzer
Change-Id: I98b1fc2ec3298ba104fc9b32aa34cd8ecd0a8ce1
Reviewed-on: https://dart-review.googlesource.com/45423
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-03-07 14:45:20 +00:00
Peter von der Ahé a55cdaee08 A bit of gardening
Change-Id: I5cee2e167e283c7e89d2a5c9a3f83edc1cf005b3
Reviewed-on: https://dart-review.googlesource.com/45422
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-03-07 14:11:40 +00:00
Paul Berry db08061424 Handle implicit tear-off of .call when an implicit downcast is required
Previously, we were setting `expression` incorrectly after generating
the implicit tear-off of .call, so if an implicit downcast was needed
as well, it was not attached to the proper kernel node, and the
resulting kernel representation was invalid.

Addresses the front end manifestation of #32426.

Change-Id: Ibd86b75c54a53db1fc4606b7583910c57e1c4aae
Reviewed-on: https://dart-review.googlesource.com/45522
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-03-07 13:59:39 +00:00
Lasse R.H. Nielsen 9986b6de25 Fix bugs in implicit-creation tests. Add one more test.
Change-Id: Id5328ba0568d7eba78c2b9145ee2db3476dc5bd5
Reviewed-on: https://dart-review.googlesource.com/44961
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-03-06 13:47:51 +00:00
Brian Wilkerson 0b332de3a8 Refactor where AST re-writing is happening to not interact poorly with inference (issue 32342)
Change-Id: Ia8c0d17cedb78709dce421658eb46ff6a80d56c5
Reviewed-on: https://dart-review.googlesource.com/44384
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-03-05 14:22:02 +00:00
Paul Berry 2993476129 Report an error if a class inconsistently implements a generic interface.
This is not allowed in Dart 2.0.

Change-Id: I6861ce298e5d5a5cf3f26a010990868b5ba9bda2
Reviewed-on: https://dart-review.googlesource.com/39601
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-03-05 12:13:12 +00:00
Paul Berry 063a244a7f Fix analyzer bot failures in non-strong mode.
Change-Id: I614f2b5869e8b2ac022cc401df08d4dda4efd513
Reviewed-on: https://dart-review.googlesource.com/44101
Reviewed-by: William Hesse <whesse@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-02-28 09:22:13 +00:00
Jens Johansen 7b4ad246b7 [kernel] Fix crash in mixin resolution on invalid override
Change-Id: I602fe4aaed1520ead002933a41ca75527e93e4af
Reviewed-on: https://dart-review.googlesource.com/42746
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-02-27 14:14:08 +00:00
Jens Johansen dc7b26ec37 Update status files after ac7f580005 try #2
Change-Id: I038f3bc6d636a109effbb848c52e53ce2e03780d
Reviewed-on: https://dart-review.googlesource.com/43341
Reviewed-by: Jens Johansen <jensj@google.com>
2018-02-23 08:07:16 +00:00
Jens Johansen 8d2fdfc36a Update status files after ac7f580005
Change-Id: Ia0ebef9e65b3cae7d3d6d9e0b1794aa7110d5e3d
Reviewed-on: https://dart-review.googlesource.com/43340
Reviewed-by: Jens Johansen <jensj@google.com>
2018-02-23 07:37:05 +00:00
Jens Johansen e8026c1e76 [fasta] Fix crash on dynamic<argument>
Change-Id: Ibebb7bc5b95979cef9254305430b55ce8cb3cb34
Reviewed-on: https://dart-review.googlesource.com/42744
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-02-22 14:06:03 +00:00
Paul Berry b119f7a4cd Only allow implicit use of .call if it refers to a method.
Change-Id: I4c332b64eb7338ceaf63544c3dd0317f8c7d4538
Reviewed-on: https://dart-review.googlesource.com/42020
Reviewed-by: Erik Ernst <eernst@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-02-21 14:12:14 +00:00
Kevin Millikin 1b1fe0be35 Fix a broken language_2 test
As far as I can tell, both of these are intended to be compile-time
errors and not run-time errors.

Change-Id: I7c3ee8b1431d954b3b74e668c88517dc032cd8ce
Reviewed-on: https://dart-review.googlesource.com/41700
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2018-02-19 11:30:07 +00:00
Leaf Petersen 3d6ad7b3a2 Remove fuzzy arrows except on assignability
Change-Id: I00ffa8f6f85cede8badd4d7082da4603f998956c
Reviewed-on: https://dart-review.googlesource.com/40470
Reviewed-by: Jenny Messerly <jmesserly@google.com>
2018-02-17 00:30:56 +00:00
Lasse R.H. Nielsen 0fb1c5bc7b Mark test as failing on analyzer.
Change-Id: I7ebe8f4cbdafbf6b93fb3af2950c956c18790c6f
Reviewed-on: https://dart-review.googlesource.com/41680
Reviewed-by: Erik Ernst <eernst@google.com>
2018-02-15 11:32:59 +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 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
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