Commit Graph

1367 Commits

Author SHA1 Message Date
Jenny Messerly 0aa6801f8a fix function type printing in DDC to match VM
Change-Id: I2e15d34c8a40d9ed86b44f5c3db7052fb7c8a783
Reviewed-on: https://dart-review.googlesource.com/14780
Commit-Queue: Jenny Messerly <jmesserly@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-27 22:35:20 +00:00
Bob Nystrom cf8a477cb7 Support test packages in dartdevk in test.dart.
This allows dartdevk to compile tests that import packages like expect.
There are a few pieces to this:

- Add support to build_pkgs.dart to build the kernel summaries for each
  test package (in addition to the analyzer summaries it already
  builds).

- Plumb that through the dartdevc_test target in the GN build as well.

- While we're at it, use GN to build the ddc_sdk.dill file and have
  test.dart load that one instead of the manually built one from calling
  ./tool/kernel_sdk.dart.

- Add command-line arguments to dartdevk for passing in the path to the
  SDK summary and the other summaries to compile against.

- Fix a little typo in processed_options.dart that was preventing it
  from resolving "package:" URIs.

- In test.dart, when compiling a test, link in the summaries for all of
  the test packages.

At runtime, it still uses the JS for those packages generated from the
old analyzer-based front end since the kernel-based compiler isn't
complete enough to compile any of those packages yet.

With all of this, if I change a test to:

  import "package:expect/expect.dart";

  main() {
    Expect.equals("a", "b");
  }

Then it compiles but fails at runtime. The compiler is completing, but
the generated code has some bugs. I don't know enough to fix them
myself, but here's what I've found out:

- In _libraryToModule(), the Library we get from kernel has a null
  fileUri, so this returns an empty string. That in turn means the
  generated JS tries to use "$" as the module name.

  Using this works around it temporarily:

      if (moduleName.isEmpty) moduleName = library.name;

- In _emitTopLevelNameNoInterop(), it doesn't handle the case where the
  NamedNode is a static method on a class. It just generates the library
  and method name, skipping the class, so "Expect.equals(1, 2)" gets
  compiled to "expect.equals(1, 2)" instead of
  "expect.Expect.equals(1, 2)".

Change-Id: I6bd9d98bc9706965160d8fb7cf70b20eeebab3a8
Reviewed-on: https://dart-review.googlesource.com/16687
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-27 21:25:58 +00:00
Jenny Messerly 5a4100b595 add a workaround to async/await for DDC's ignore cast fail unsoundness
Change-Id: Ic5e58d31b6b5d46bf74a3c7363e19fca239cdc21
Reviewed-on: https://dart-review.googlesource.com/17040
Reviewed-by: Leaf Petersen <leafp@google.com>
Commit-Queue: Jenny Messerly <jmesserly@google.com>
2017-10-27 20:12:39 +00:00
Jenny Messerly 77775c5292 Unroll mixins in DDC, so each mixin application is generated
This is for compatibility with Kernel, as well as fixing several bugs,
and generally being a more robust architecture.

This may also perform better than the current design.

Notable fixes include several issues around deferred classes.

Change-Id: I1b6f44ebdf6304b10b47d19026156a25e04146ef
Reviewed-on: https://dart-review.googlesource.com/16337
Commit-Queue: Jenny Messerly <jmesserly@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2017-10-27 04:26:44 +00:00
Jenny Messerly 07f189703a Optimize DDC's async/await code to avoid unnecessary zone registration
Other improvements:
* avoids an extra intermediate future in `async`, and unnecessary type tests
* uses optimized type tests instead of older isSubtypeOf
* avoids an extra closure for async/async*
* avoids Function.apply for async/async*/sync*
* avoids an extra cosure for sync* if the arguments are not modified

Change-Id: I897708387fce59a97696f05b01cc668f1043fe5c
Reviewed-on: https://dart-review.googlesource.com/16332
Commit-Queue: Jenny Messerly <jmesserly@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2017-10-27 01:07:04 +00:00
Vijay Menon 4f9f77aedc Remove dcall in dart:convert
Seeing this in the hot path on an internal app.

Change-Id: I921f12ece706b4ea92d9a97858fde2799972f653
Reviewed-on: https://dart-review.googlesource.com/15940
Commit-Queue: Vijay Menon <vsm@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2017-10-25 18:28:06 +00:00
Bob Nystrom 67ca95fc2c Support different module formats in dartdevk.
Change-Id: I0683c1bdaa5e67332d67f9ec84052851b4b0c649
Reviewed-on: https://dart-review.googlesource.com/15760
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-20 23:25:08 +00:00
Bob Nystrom 9c0a6fd27c Add rudimentary support for dartdevk to test.dart.
It's added as a new compiler, so pass "-c dartdevk" to use it.

It doesn't support any test packages yet, so tests that, say, import
package expect won't compile. I'll work on that next, but it will
require adding some stuff to the build scripts to build .dill files for
those packages.

This does get test.dart invoking the compiler, running the resulting
test, and correctly reporting the result:

- A test that doesn't throw an exception and stays within the bounds of
  what is currently implemented in dartdevk passes.

- A test that compiles correctly but fails at runtime fails with a
  RuntimeError.

- A test that contains a compile error fails with a non-zero exit code
  and is reported as a CompileTimeError.

Change-Id: Icacbf1ff54dfe7aa4d245382d3b0aeb375cf105b
Reviewed-on: https://dart-review.googlesource.com/15420
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-20 16:00:28 +00:00
kmillikin 95982b53cd [ddc-kernel] Compile return and arrow functions
Compile return statements.  Kernel function bodies are statements, not
necessarily blocks.  In that case, blockify the JS function body.

Bug:
Change-Id: Ibbed1c2039b103151b7244774f3daf8992264a88
Reviewed-on: https://dart-review.googlesource.com/15280
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2017-10-19 20:58:37 +00:00
Leaf Petersen dd17a4c7f7 Alpha-vary generic function types before performing inference.
Generic function types were not previously renamed before using them
for inference, which resulted in capture problems when doing inference
on recursive generic method invocations.

Fixes #30980

Bug:
Change-Id: I1c610606dd65d86735cb615e077d720066a85e1a
Reviewed-on: https://dart-review.googlesource.com/15040
Commit-Queue: Leaf Petersen <leafp@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Jenny Messerly <jmesserly@google.com>
2017-10-19 19:26:07 +00:00
Jenny Messerly 4234e18593 workaround fasta test incorrectly analyzing DDC code
pkg/front_end/test/fasta/analyze_test is incorrectly failing because of DDC changes.
This must be fixed, but in the meantime this works around it.

Change-Id: I72fd56f9b306dce9b1f34e810c6ece3f6d8f49fb
Reviewed-on: https://dart-review.googlesource.com/14342
Reviewed-by: Jenny Messerly <jmesserly@google.com>
2017-10-17 00:26:22 +00:00
Jenny Messerly ef3ac59dd6 add a dartdevk command that compiles with the new front end
This ports a fairly large part of DDC's Analyzer-based code generator,
however most nodes are not supported yet.

The goal is to preserve all functionality of code that was ported,
except for deprecated features (e.g. mirrors, fuzzy arrows, libraryRoot).

Change-Id: I3b10d5773c7c10a740fa336720243b03c6b82529
Reviewed-on: https://dart-review.googlesource.com/10705
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-16 21:13:52 +00:00
Jennifer Messerly 697e531c17 fix IdentityMap setter concurrent modification detection
Change-Id: Ib999210cf5709a4cef6a14a8d7fafe7b516f09c9
Reviewed-on: https://dart-review.googlesource.com/13641
Commit-Queue: Vijay Menon <vsm@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-13 20:57:24 +00:00
Vijay Menon 0553e2ba15 Regen DDC SDK
TBR=rnystrom@google.com

Change-Id: I4406552de08e379cac8a75f9c8e0e353dd927a21
Reviewed-on: https://dart-review.googlesource.com/13440
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-10-12 04:07:05 +00:00
Jennifer Messerly 8c36b4685f fix #31049, fix #31050, avoid name collision for static members
Change-Id: I5a14315b99ace15aa6ac0c67f753bc3e1f39b3a9
Reviewed-on: https://dart-review.googlesource.com/12481
Commit-Queue: Jennifer Messerly <jmesserly@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-11 21:00:02 +00:00
Vijay Menon 4917131ff4 Regen DDC sdk
TBR=rnystrom@google.com

Change-Id: I58e832edd16bd6b864eadb27b91dc3645be13e90
Reviewed-on: https://dart-review.googlesource.com/13001
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-10-11 15:19:10 +00:00
Vijay Menon c1d45769c3 Inline constant values
Change-Id: Iee929bc64c152be989e6e7ba38132f806c33c7e0
Reviewed-on: https://dart-review.googlesource.com/11960
Commit-Queue: Vijay Menon <vsm@google.com>
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
2017-10-10 13:21:41 +00:00
Jennifer Messerly 32eb7e3612 fix #30944, mark specific nodes with source information
This change fixes bugs that users see when we mark declaration code,
while also reducing the source map size (improving startup & reducing
the load on devtools). The SDK source map is reduced by 41%.

Stack traces and stepping should be more accurate after this change, but
if we identify any node(s) that need different marking, we now have
the tools to refine it further.

Change-Id: Ie50c6aca873be7b7c0f7c238a9db2001acbceb5c
Reviewed-on: https://dart-review.googlesource.com/10210
Commit-Queue: Jennifer Messerly <jmesserly@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
Reviewed-by: Alan Knight <alanknight@google.com>
2017-10-10 03:40:40 +00:00
Jennifer Messerly c05a4439bc fix DDC handling of @notNull annotation for ?. method calls
Change-Id: I9be22e126ff32c16a90fc85e3d754258e9fc98c3
Reviewed-on: https://dart-review.googlesource.com/12344
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-10 00:35:31 +00:00
Vijay Menon 05619da8ea Optimize String.length
Change-Id: I7e8481c8822d170492112704e04b92b19d5e5f2e
Reviewed-on: https://dart-review.googlesource.com/12340
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-10-10 00:22:36 +00:00
Vijay Menon a7e5d104bf Fill array on allocation
Fixes #31002

Change-Id: Idaee4ca544e567b4239098c852a040128e6b5d82
Reviewed-on: https://dart-review.googlesource.com/11242
Commit-Queue: Vijay Menon <vsm@google.com>
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
2017-10-05 20:04:24 +00:00
Jennifer Messerly 3a79c35f3c optimize maps/sets in DDC, fixes #29865
- string/int keys use identity maps
- construct the correct type rather than relying on factory constructors when possible
- checks if key has identity semantics and use that when possible
- avoid helper calls/casts/etc in implementations
- use native ES6 Map/Set key order tracking
- optimized constructor for map literals
- fixes #30466, const maps are now canonicalized correctly

Change-Id: Id44acf3d9bf8cb153a4755aa28df08fe91bfc633
Reviewed-on: https://dart-review.googlesource.com/8167
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-04 19:04:27 +00:00
Vijay Menon d6582a9d1b Use unique proto object for each library object
This appears to	 improve Gabriel's is-check benchmark by 2x and
DeltaBlue by about 30% (DDC on d8-tip).

I suspect this is improving inlining of top-level accesses on library
objects (including helpers like dart.is).

Change-Id: I1629d821b481194075a80dd6858334c1f678dd12
Reviewed-on: https://dart-review.googlesource.com/7446
Commit-Queue: Vijay Menon <vsm@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2017-10-04 18:06:59 +00:00
Vijay Menon d22557b560 Regen DDC SDK
TBR=rnystrom@google.com

Change-Id: I50cb06235bb5f9a0bd8cae8e7cc6500c33c812c2
Reviewed-on: https://dart-review.googlesource.com/10703
Reviewed-by: Vijay Menon <vsm@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-10-03 21:49:21 +00:00
Jennifer Messerly 3a907e5cab add a script to build DDC's SDK to a dill file
Change-Id: I93f9d55bd99a3b98ee823c38255e9a8081954a4b
Reviewed-on: https://dart-review.googlesource.com/10213
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-03 20:27:12 +00:00
Jennifer Messerly e5de4e2aaa fix #30966, generate signature info for native setters
Change-Id: I512a3c74ceffcab3013791b82c92cee16d804af8
Reviewed-on: https://dart-review.googlesource.com/10207
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Jennifer Messerly <jmesserly@google.com>
2017-10-03 02:55:27 +00:00
Jennifer Messerly 05ba807d43 fix #30925, optimize x is T when x is null
Change-Id: Id99a2ce821c49c4dcce098fe119aab63e916b3ab
Reviewed-on: https://dart-review.googlesource.com/9792
Reviewed-by: Vijay Menon <vsm@google.com>
2017-10-02 20:45:29 +00:00
Vijay Menon 8a81bdf64a Regen DDC sdk
TBR=jmesserly@google.com

Change-Id: I9a02f4e06d84df2f2794180755d6cb2dea2f767e
Reviewed-on: https://dart-review.googlesource.com/10160
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-10-02 19:45:37 +00:00
Vijay Menon 3e8f4dce13 Regen DDC SDK
TBR=jmesserly@google.com

Change-Id: I875cacca1a71cfb499f707e088195bad13ba3502
Reviewed-on: https://dart-review.googlesource.com/9740
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-09-29 16:56:32 +00:00
Jennifer Messerly 9978b808b4 implement NoSuchMethodError.withInvocation in DDC
Change-Id: If51546abb290d2956bacce9b5ae5adf6f2ca2d11
Reviewed-on: https://dart-review.googlesource.com/9429
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2017-09-28 23:39:43 +00:00
Jennifer Messerly 749d298b6c fix extension member discovery in DDC
In particular, some types like the base/mixin classes for Map in dart:collection did not work correctly.
This also has cleanups/optimizations to how DDC registers signatures, partially addressing #30499
Also fixes #29897, const maps are now immutable in DDC.

Change-Id: Icfdc7921d255a58a9e13908cf800832f787314ee
Reviewed-on: https://dart-review.googlesource.com/7442
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
2017-09-28 23:21:43 +00:00
Vijay Menon 84cde41da5 Add NoSuchMethodError.withInvocation to DDC patch
TBR-jmesserly@google.com

Change-Id: I7352d0caefe12f3d8a10d1383cfb2ec983b1051b
Reviewed-on: https://dart-review.googlesource.com/9368
Reviewed-by: Vijay Menon <vsm@google.com>
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
2017-09-28 22:27:22 +00:00
Jennifer Messerly 13b57ceafe fix #30912, record scope dependencies on unused typedef type arguments
Change-Id: Ic859620fb4ff7f9965b46849aa96eb74dfe59ccb
Reviewed-on: https://dart-review.googlesource.com/9125
Reviewed-by: Vijay Menon <vsm@google.com>
2017-09-28 21:25:31 +00:00
Jennifer Messerly a784320a99 fix #30852 - if static field init throws, it should return null after
Change-Id: Ibf273deee51be4b187dbb6d4d7f66dc35dd16fed
Reviewed-on: https://dart-review.googlesource.com/8240
Reviewed-by: Vijay Menon <vsm@google.com>
2017-09-28 18:07:58 +00:00
Vijay Menon 9ab7137ede Regen ddc sdk
TBR=leafp@google.com

Change-Id: Ia5721ff75771f3eec20eaf664d3977cbbc126b70
Reviewed-on: https://dart-review.googlesource.com/8741
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-09-27 03:03:25 +00:00
Vijay Menon 0a9253ef30 Regen SDK
Looks like merge conflicts on crossing CLs.

TBR=leafp@google.com

Change-Id: Iee2c42e53d03c57fc07f18b46635f423927a1b17
Reviewed-on: https://dart-review.googlesource.com/8700
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-09-26 17:00:11 +00:00
Vijay Menon 2ba49b4ac0 Utility for building / running on d8
Change-Id: I8ba4c7ce37d9a5fcf7742ecfdac4c0df48dc9497
Reviewed-on: https://dart-review.googlesource.com/7845
Commit-Queue: Vijay Menon <vsm@google.com>
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
2017-09-26 16:09:51 +00:00
Leaf Petersen 8c924f2923 Tighten the is check in handleError.
Bug:
Change-Id: I23f49f65a395579293f0567e8069ccd931e00c4a
Reviewed-on: https://dart-review.googlesource.com/7842
Commit-Queue: Leaf Petersen <leafp@google.com>
Reviewed-by: Florian Loitsch <floitsch@google.com>
2017-09-26 13:38:05 +00:00
Leaf Petersen e350bb4565 Eliminate fuzzy arrow uses in SDK libraries.
Bug:
Change-Id: Ia1a00966b8d77c5aa812ed19eca136c47132ae58
Reviewed-on: https://dart-review.googlesource.com/8540
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2017-09-26 12:56:05 +00:00
Leaf Petersen e0c2e8191f Eliminate fuzzy arrow from conversions_dart2js.dart
Bug:
Change-Id: Ide970d2a5353e53af9f0a73748b12b2fb770ebcb
Reviewed-on: https://dart-review.googlesource.com/7941
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
2017-09-26 10:37:48 +00:00
Vijay Menon ed8d1d32e6 Regen DDC SDK
TBR=leafp@google.com

Change-Id: I830fb4b0f293a5b9805907f461e57ccf48214363
Reviewed-on: https://dart-review.googlesource.com/7740
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: William Hesse <whesse@google.com>
2017-09-22 15:29:37 +00:00
Gary Roumanis c69a9274d3 Don't annotate FunctionDeclarations
Bug:38419508
Change-Id: I5298fcd31e058bb4958136775e67d955a3feb010
Reviewed-on: https://dart-review.googlesource.com/7630
Commit-Queue: Gary Roumanis <grouma@google.com>
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
2017-09-21 23:05:39 +00:00
Vijay Menon d8083faecc Regen DDC SDK
TBR=jmesserly@google.com

Bug:
Change-Id: Icecb6576b4f5c70fdcfb0e220543a96e3621da92
Reviewed-on: https://dart-review.googlesource.com/7580
Reviewed-by: Vijay Menon <vsm@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-09-21 17:18:02 +00:00
Vijay Menon 8470c871d6 Enable polyfill in d8 modules
This enables running benchmarks (e.g., DeltaBlue) on d8.  d8 tip (with
es6 modules) appears quite a bit faster than the latest dev nodejs (with common modules).

Change-Id: Iedcc97fac57c48b925ae7c1b6cba4bbedeba4d0b
Reviewed-on: https://dart-review.googlesource.com/7443
Commit-Queue: Vijay Menon <vsm@google.com>
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
2017-09-20 22:47:21 +00:00
Jennifer Messerly 3224db05be fix #30792 -- fix variables shadowing parameters in an async function
Change-Id: I40667f607450af8695aafc613358d401cd395af2
Reviewed-on: https://dart-review.googlesource.com/7042
Reviewed-by: Vijay Menon <vsm@google.com>
2017-09-20 20:09:25 +00:00
Florian Loitsch 38bf70d7ac Use generic functions in zones.
Migrated from https://chromiumcodereview.appspot.com/2893893002/

Change-Id: I0bd6dc1438eb1e6762e7760a08b5a760b07d4b10
Reviewed-on: https://dart-review.googlesource.com/4942
Reviewed-by: Florian Loitsch <floitsch@google.com>
Commit-Queue: Florian Loitsch <floitsch@google.com>
2017-09-20 15:46:06 +00:00
Vijay Menon 6ce85d5f99 Revert "Remove support for functions in asserts in DDC."
This reverts commit 8140e1db64.

Change-Id: If505903ba475324392d6c6bcdae3392f523aadc8
Reviewed-on: https://dart-review.googlesource.com/7107
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2017-09-19 21:46:13 +00:00
Gary Roumanis 07e9cfedad Load exception event
Dispatch load exception so that others can react without capturing the corresponding error. Will be used in conjunction with https://github.com/dart-lang/test/pull/682

Bug:
Change-Id: I19458ac01ba013cac6ad5408b3b763777e50ca4e
Reviewed-on: https://dart-review.googlesource.com/6644
Reviewed-by: Jake Macdonald <jakemac@google.com>
Commit-Queue: Gary Roumanis <grouma@google.com>
2017-09-18 19:12:52 +00:00
Bob Nystrom 8140e1db64 Remove support for functions in asserts in DDC.
These are not supported in Dart 2.0:

https://github.com/dart-lang/sdk/issues/30326
Change-Id: I2e177a647c43af2bf7f37ff382234b12b8c2286c
Reviewed-on: https://dart-review.googlesource.com/4182
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
2017-09-15 23:37:06 +00:00
Jennifer Messerly 67b9d3b9f9 fix metadata reflection for fields
Change-Id: I25d69eea235b0824c49320212706e66945480034
Reviewed-on: https://dart-review.googlesource.com/6024
Reviewed-by: Jennifer Messerly <jmesserly@google.com>
Commit-Queue: Jennifer Messerly <jmesserly@google.com>
2017-09-15 00:08:17 +00:00