Commit Graph

931 Commits

Author SHA1 Message Date
Asger Feldthaus 084bd8add2 Speed up kernel sanity checks.
Sanity checks now run in a single pass rather than two, and
instead of building a set consisting of all members, it uses
a bit from the transformer flags to remember which members are
not orphaned.

As an additional check, it now checks that members are not
declared more than once.

R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2529973002 .
2016-11-25 12:02:05 +01:00
Asger Feldthaus 963e1ebc55 Do not sort named parameters on FunctionNode.
This was originally done to be consistent with FunctionType,
where the named parameters are sorted, but for FunctionNode
it is not necessary.

It causes issues for natives that expect parameters to be
declared in a certain order. It is also an issue if we
ever want to reuse the kernel format for summaries, where
it is also preferable to present the named parameters in
their original order.

BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2527933002 .
2016-11-25 11:22:37 +01:00
Asger Feldthaus d056236180 Enable strong-mode for pkg/kernel and fix some strong-mode warnings.
BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2523673005 .
2016-11-23 16:16:37 +01:00
Asger Feldthaus 5d310431bd Remove closure_conversion.dart from pkg/kernel.
This file is not strong-mode clean, but since a more recent version
of closure conversion still exists in a branch on the kernel github
repo, there is not much point in fixing this version of it.

BUG=
R=ahe@google.com

Review URL: https://codereview.chromium.org/2526793002 .
2016-11-23 15:34:35 +01:00
Asger Feldthaus f13881ac08 Fix the pubspec and warnings in pkg/kernel.
BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2530543002 .
2016-11-23 14:36:22 +01:00
Asger Feldthaus ac21874a21 Disable kernel unit tests.
They are causing issues on dartium and dart2js_jsshell.

BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2528623002 .
2016-11-23 14:12:54 +01:00
Asger Feldthaus 2eb09d26e3 [kernel] Update and disable some kernel unit tests.
This is in preparation of merging into the SDK repository.
2016-11-23 12:14:59 +01:00
Asger Feldthaus f28c1276ee [kernel] Bump kernel's pubspec version to 0.2.0
BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2515273002 .
2016-11-21 13:08:17 +01:00
Asger Feldthaus c62d774c2f [kernel] Upgrade analyzer version to 0.29.0
BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2517113002 .
2016-11-21 10:24:29 +01:00
Asger Feldthaus 58019fa42a [kernel] Fix some issues after introducing NamedType.
Some code in type_checker.dart had not been updated and there
was an unused method left in type_algebra.dart.

BUG=
R=ahe@google.com

Review URL: https://codereview.chromium.org/2504313002 .
2016-11-16 17:09:48 +01:00
Asger Feldthaus acc8975cab [kernel] Store named parameters in sorted lists instead of using maps.
FunctionType now has a List<NamedType> which must be sorted by name.
Previously, named parameters were stored in a Map<String, DartType>.

FunctionNode still has a List<VariableDeclaration>, but this list must
now be sorted by name.

BUG=
R=ahe@google.com

Review URL: https://codereview.chromium.org/2502343002 .
2016-11-16 15:16:24 +01:00
Asger Feldthaus df36c0b63e [kernel] Remove unnecessary indexing passes from serialization.
Computing the index for variables, labels, and switch cases is now
done on-the-fly instead of as separate passes.

BUG=
R=ahe@google.com

Review URL: https://codereview.chromium.org/2507723002 .
2016-11-16 15:13:27 +01:00
Asger Feldthaus 7ca4400f5b [kernel] Fix parent pointer issue in async rewriter.
BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2502943002 .
2016-11-15 14:27:22 +01:00
Asger Feldthaus e63a33717e [kernel] Fix some strong mode issues.
BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2464843002 .
2016-11-14 10:23:37 +01:00
Asger Feldthaus 35ffad846d [kernel] Erasure fix: Replace type parameters with dynamic instead of Object.
Using Object causes issues in function types.

This fixes an issue for running delta-blue in AOT strong mode.

BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2492453002 .
2016-11-14 10:10:49 +01:00
Asger Feldthaus f6c3ebe4ee [kernel] Fix a bug in printing of string literals with escape sequences.
BUG=
R=ahe@google.com

Review URL: https://codereview.chromium.org/2500453002 .
2016-11-11 12:22:29 +01:00
Jens Johansen 18baf4394c [kernel] Fixed crash when compiling without linking.
Since offsets and uris was added to the dill file, compiling to dill
without linking hasn't worked because of external libraries.

The external libraries doesn't add to the line starts table and thus
the uris from libraries, classes and so on isn't recorded.

When trying to write an unrecorded uri to the dill file it fails.

The simple solution applied here is to fall-back to the empty
string when the uri hasn't been recorded.

BUG=
R=asgerf@google.com

Review URL: https://codereview.chromium.org/2483243002 .
2016-11-08 14:54:15 +01:00
Kevin Millikin 8adc4a6286 [kernel] Fix a bug in the async translation of let expressions.
If the body of a let expression contains an await, the translation could
hoist statements that contain references to the let-bound variable out
of its scope.

Instead split by cases on whether the body contains an await.  If so, we
hoist let-bound variables to the statement level.  If not, we produce a
let expression.

BUG=
R=asgerf@google.com

Review URL: https://codereview.chromium.org/2480743002 .
2016-11-04 14:20:12 +01:00
Asger Feldthaus 652b28f604 [kernel] Do not duplicate constructors for named mixin applications.
BUG=
R=jensj@google.com

Review URL: https://codereview.chromium.org/2473223003 .
2016-11-04 13:45:20 +01:00
Asger Feldthaus 7607618633 [kernel] Ensure the substitution map in the CloneVisitor is mutable.
BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2477873002 .
2016-11-04 10:44:37 +01:00
Asger Feldthaus 50d99ee64c [kernel] Fix expected return type in async functions.
Also add support for yield* in the type checker.

BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2473523004 .
2016-11-03 15:08:57 +01:00
Kevin Millikin fb4123b566 [kernel] Kernel: Fix a bug with await in finally.
The translation for async and async* functions translates returns into
two statements, where the second one is a return.  The VM's compilation
strategy is to inline the code for all finally blocks immediately before
a return statement.

This causes future completion/stream cancellation to occur before
finally blocks, instead of after as intended.

The solution here is to translate returns into a break from a labeled
block and put a single async/async* return sequence, outside any finally
blocks, after the labeled block.

BUG=
R=asgerf@google.com

Review URL: https://codereview.chromium.org/2476513003 .
2016-11-03 10:44:24 +01:00
Asger Feldthaus 9c464d2149 [kernel] Type check untyped == calls specially.
A comparison of form x == null does not need an interface target, but
should still have a return type of 'bool'.

BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2466373002 .
2016-11-02 09:59:24 +01:00
Kevin Millikin 5f93106653 [kernel] Support both older and newer implementations of dart:async.
The VM target's continuation transformer uses a class that was originally
named _StreamIteratorImpl and then renamed to _StreamIterator.  If looking
up the old name fails, try the new name.

BUG=
R=jensj@google.com

Review URL: https://codereview.chromium.org/2465163004 .
2016-11-02 09:32:25 +01:00
Asger Feldthaus 37c5809ccc [kernel] Always store the type of a conditional expressions on the node.
Previously, the type of a conditional expression could be omitted if
one of the arms was just a null literal. This was meant to simplify
translation into kernel, but wasn't really worth it in terms of
complexity, and it does not work well for types that carry nullability
information.

BUG=
R=ahe@google.com

Review URL: https://codereview.chromium.org/2465263002 .
2016-11-01 16:04:10 +01:00
Asger Feldthaus ca5bb64dc0 [kernel] Add strong mode type checking pass.
This is a piece of the upcoming strong mode-based type propagation.
The new type propagator will build its inference graph based on the
subtyping constraints found during type checking.

This type checker is not intended to report type errors to end-users.
In its current form, it is quite redundant with the front end's type
checker, but this will not be the case once we augment kernel's type
system.

The internals of "dart:" libraries are not type checked -- they are
simply assumed to satisfy the type annotations on their interfaces.

BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2465893002 .
2016-11-01 15:43:31 +01:00
Kevin Millikin a6bba9520b [kernel] Remove BlockExpression from the Kernel language.
BlockExpression allowed statements to appear in an expression context.
It is unsafe for its original use case, allowing 'yield' to appear as an
expression, because the VM's yield implementation does not work when
there are live expression intermediate values.

Eliminate it by changing the async ExpressionLifter to return a
transformed expression and emit statements into a given list as a side
effect.  This requires implementing the transformation for all
statements to account for how they may contain a nested expression.

BUG=
R=asgerf@google.com

Review URL: https://codereview.chromium.org/2460373002 .
2016-11-01 14:13:30 +01:00
Asger Feldthaus 9b3e387f34 [kernel] Add convenience getter to extract the location of an AST node.
TreeNode.location is a getter for use in diagnostics and debugging.

It uses parent pointers to find the enclosing file URI and line ending
table of the node. If the node has no offset stored, it will use that
of the first enclosing parent that has an offset.

BUG=
R=ahe@google.com, jensj@google.com

Review URL: https://codereview.chromium.org/2448873004 .
2016-10-31 11:29:37 +01:00
Asger Feldthaus f764b34682 [kernel] Introduce Substitution class and Supertype class.
Type annotations in the supertype clauses of a class are now Supertypes
instead of InterfaceTypes. In the current version, the two classes
contain the same information, but they are about to diverge in the
following ways:

- An InterfaceType may be nullable, whereas a supertype cannot.

- An InterfaceType may represent the exact class, a subclass, or
  a subtype of the given class.

- The type arguments to an interface type represent bounds, whereas
  the arguments to a supertype are always exact.

We also introduce a class Substitution that represents an operator
that replaces type parameters with types, depending on the variance
of their use site.

A substitution can be applied to a DartType or a Supertype, and can
be generated independently of how it will be applied.

BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2439043002 .
2016-10-24 16:21:52 +02:00
Vyacheslav Egorov b33181adbd [kernel] New VM libraries renamed _StreamIteratorImpl into _StreamInterator.
R=kmillikin@google.com
BUG=

Review URL: https://chromereviews.googleplex.com/527977013 .
2016-10-24 13:19:03 +02:00
Asger Feldthaus 18cbd9dcce [kernel] Add a version number to the pubspec.
BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2439603003 .
2016-10-20 14:02:41 +02:00
Asger Feldthaus bf2df5877e [kernel] Remove obsolete part of readme
BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2441603002 .
2016-10-20 13:12:41 +02:00
Asger Feldthaus becc43a03c [kernel] Add null initializers to fields that have no initializer.
That is, if a field has no declaration-site initializer and at least
one constructor in the class does not initialize it, then we add an
explicit null initializer for it.

BUG=
R=ahe@google.com

Review URL: https://chromereviews.googleplex.com/527827014 .

Committed: https://github.com/dart-lang/kernel/commit/63c241ee69fb41710b66df106626461539ce0187
2016-10-18 12:55:10 +02:00
Asger Feldthaus d90deb1491 [kernel] Revert "Add null initializers to fields that have no initializer."
This reverts commit 63c241ee69fb41710b66df106626461539ce0187.

BUG=

Review URL: https://codereview.chromium.org/2431623002 .
2016-10-18 12:26:08 +02:00
Asger Feldthaus 8f836aef2e [kernel] Add null initializers to fields that have no initializer.
That is, if a field has no declaration-site initializer and at least
one constructor in the class does not initialize it, then we add an
explicit null initializer for it.

BUG=
R=ahe@google.com

Review URL: https://chromereviews.googleplex.com/527827014 .
2016-10-18 12:14:33 +02:00
Peter von der Ahé 8a6629eb5e [kernel] Use public review server.
R=asgerf@google.com

Review URL: https://codereview.chromium.org/2428593002 .
2016-10-18 11:37:37 +02:00
Jens Johansen 1048f55a29 [kernel] Don't emit InvalidExpression on invalid super in binaryexpression
Don't emit invalidexpression on invalid super call --- a correct call will be created later

BUG=
R=asgerf@google.com

Review URL: https://chromereviews.googleplex.com/524077013 .
2016-10-14 13:49:51 +02:00
Asger Feldthaus 0b72c538cc [kernel] Update doc comment for TypeParameter.bound.
BUG=
R=ahe@google.com

Review URL: https://chromereviews.googleplex.com/526987013 .
2016-10-14 13:29:36 +02:00
Peter von der Ahé a61ac3cc41 [kernel] Use Sink<List<int>> instead of IOSink.
R=asgerf@google.com

Review URL: https://chromereviews.googleplex.com/521257013 .
2016-10-14 12:16:13 +02:00
Jens Johansen 871a8ccfcc [kernel] Create call to noSuchMethod when super call is not correct.
R=asgerf@google.com

Review URL: https://chromereviews.googleplex.com/521977014 .
2016-10-14 08:18:25 +02:00
Asger Feldthaus cb80b352e2 [kernel] Fix a bug in bounded type substitution.
When visiting a generic function type in contravariant context, the
current variance bit would not be propagated to the inner visitor.

For example,

  (<F>(T,F) => F) => int [bottom <: T <: String]

would erroneously map to:

  (<F>(bottom,F) => F) => int

instead of:

  (<F>(String,F) => F) => int

Generic function types cannot occur in contravariant position
using current Dart syntax, but it could possibly occur as an
intermediate type.

BUG=
R=ahe@google.com

Review URL: https://chromereviews.googleplex.com/521207013 .
2016-10-13 16:20:33 +02:00
Asger Feldthaus 5f31eff8bd [kernel] Type parameter bounds default to Object instead of dynamic.
This also affects the textual output in most cases, since the bound
is now shown explicitly.

BUG=
R=jensj@google.com

Review URL: https://chromereviews.googleplex.com/526827013 .
2016-10-11 15:21:48 +02:00
Asger Feldthaus b0bfbadbc3 [kernel] Support interface members and overrides with duplicate member names.
When a class inherits two abstract members with the same name from
different supertypes, both members are now present the list returned
by ClassHierarchy.getInterfaceMembers. Previously, only one of the
member would be present.

This ensures that all override pairs can be detected, which in turn
is necessary for inserting covariance checks in strong mode.

Another change in this CL is that interface members are built
eagerly instead of on-demand. This makes the ClassHierarchy more
reliable when used for transformation, and easier to benchmark.

BUG=
R=kmillikin@google.com

Review URL: https://chromereviews.googleplex.com/520907013 .
2016-10-10 11:15:56 +02:00
Asger Feldthaus f8b0846bc5 [kernel] Do not compile patched SDK in strong mode when using VM target.
The VM patch files are not strong mode clean, so we're using a hybrid
approach where the SDK is internally unchecked, and is trusted to
satisfy the types on its interface.

BUG=
R=kmillikin@google.com

Review URL: https://chromereviews.googleplex.com/516487014 .
2016-10-07 15:40:46 +02:00
Asger Feldthaus 9b25e445ed [kernel] Follow redirecting factories to their effective targets.
Previously, we would generate a stub for a redirecting factory, but
the default parameter values were not correctly forwarded.

This could have been fixed by copying the default parameter values into
the stub, but this conflicts with modular compilation, since the
element model does not expose default parameter values, and we should
not rely on the AST of libraries not part of the current build unit.

Apart from fixing this bug, this is also more aligned with how all the
backends actually work.

R=kmillikin@google.com

Review URL: https://chromereviews.googleplex.com/513577013 .
2016-10-07 13:34:14 +02:00
Asger Feldthaus 49d4e3a789 [kernel] Update baselines according to change in text printer.
BUG=

Review URL: https://chromereviews.googleplex.com/518067013 .
2016-10-06 15:47:24 +02:00
Asger Feldthaus ad049ce479 [kernel] Ignore fields inserted through error recovery.
Fields without names often arise when the analyzer fails to parse a
union type in a type argument inside a comment. For example:
  Future/*<Foo|Bar>*/ future;

BUG=
R=kmillikin@google.com

Review URL: https://chromereviews.googleplex.com/519077015 .
2016-10-06 12:59:52 +02:00
Asger Feldthaus d3fdc335a3 [kernel] Update erasure pass to erase type parameters in constants.
Strong mode allows constant expressions to reference type parameters.
This requires constants to be canonicalized at runtime, but it is not
yet determined exactly how this feature will work in future versions
of the language.

For now, we work around it by replacing such types with 'dynamic'.

BUG=
R=kmillikin@google.com

Review URL: https://chromereviews.googleplex.com/516477013 .
2016-10-06 12:58:11 +02:00
Kevin Millikin 466c43c8e0 [kernel] Only produce 'top-level' block expressions from async.
Block expressions are expressions and so can be arbitrarily nested.
They can contain statements, including yield statements.  The VM's
implementation of yield assumes that it can only occur when there are no
live intermediate values.  It is not generally safe to allow
yield-containing block expressions to appear as arbitrary
subexpressions.

As a first step toward eliminating block expressions, this change
flattens the ones produced by the async transformation so that they can
only occur as the children of statements.

BUG=
R=asgerf@google.com

Review URL: https://chromereviews.googleplex.com/517457014 .
2016-10-06 08:15:44 +02:00
Asger Feldthaus ea2ddd0882 [kernel] Fix canonicalization of mixin classes.
A mixin application C<T1 ... Tm> with D<T1 ... Tn> is canonicalized if
the Ts are distinct, unbound type variables. In all other cases, a new
class is created per mixin application.

Previously, all mixin applications were canonicalized in an overly
general way, causing type checking issues, and excessive duplication of
type parameters.

BUG=
R=kmillikin@google.com

Review URL: https://chromereviews.googleplex.com/511567015 .
2016-10-04 17:45:24 +02:00