Commit Graph

312 Commits

Author SHA1 Message Date
Erik Ernst ade528c4e6 Fixed the type alias omission in the def. of simple bounds
Cf. SDK issue 34722, where the need for this clarification arose.

Change-Id: I3b1692931506410e77c59004b1ed1981a17a6f3d
Reviewed-on: https://dart-review.googlesource.com/c/78982
Reviewed-by: Leaf Petersen <leafp@google.com>
2018-10-12 08:10:45 +00:00
Erik Ernst 7c7df7bfa4 Add initial version of feature specification on interface conflicts.
This feature specification is intended to resolve bullet item 2 in
the issue https://github.com/dart-lang/sdk/issues/31228.

A rendered version corresponding to patch set 16 is available at
https://gist.github.com/eernstg/a55c8000610a506bf0ca70b028d9f1eb.

Change-Id: I7d3e67bd7dd2d2cfc73fbd491bcfbea1814421e0
Reviewed-on: https://dart-review.googlesource.com/c/40080
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-10-11 13:32:00 +00:00
Lasse R.H. Nielsen 23c36ed029 Elaborate that -0 means -0.0 in double context or when compiled to JS.
Also fix some typos.

Change-Id: Id8ed6d22c9e7c900c4062b2cbc5b68abf93d11ba
Reviewed-on: https://dart-review.googlesource.com/c/77080
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Jenny Messerly <jmesserly@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2018-10-11 10:24:29 +00:00
Erik Ernst a9b47bd0b1 Integrated nosuchmethod-forwarding.md into dartLangSpec.tex
Change-Id: I7a29b83a69f43cb695b4305442808fa45b745faa
Reviewed-on: https://dart-review.googlesource.com/c/77440
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2018-10-10 13:35:50 +00:00
Erik Ernst 6e561b75a1 Corrected several near-typo errors in Redirecting Factory Constructors
Change-Id: I0a09a55e3f0941309a107669513895911c18d27a
Reviewed-on: https://dart-review.googlesource.com/c/78463
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-10-08 11:19:50 +00:00
Erik Ernst 62e67d7277 Adjusted instantiate-to-bound.md such that it covers type aliases
The existing version covers generic classes only, but we should
use exactly the same rules for parameterized type aliases, which was
actually already specified in all the nested cases (e.g., `A` would mean
`A<F<dynamic>>` with the declarations `typedef F<X> = X Function();` and
`class A<X extends F<X>> {}`, but there were no rules for a plain `F`).

A rendered version corresponding to patchset 3 is available here:
https://gist.github.com/eernstg/6deffcde2cbe79f8ba499b3aac950900

Change-Id: Ic265ccc736c65361919e860b1ab7ecb947c2c066
Reviewed-on: https://dart-review.googlesource.com/c/76660
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-10-03 10:49:32 +00:00
Erik Ernst 0a2659942e Adjusted terminology to emphasize "compile-time constant" in commentary
.. and always use a plain `constant` in normative text. Also fixed a few
LaTeX issues.

Change-Id: I5682f5c5b22120691c620144318f0670c4ba0a24
Reviewed-on: https://dart-review.googlesource.com/76980
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-28 12:54:23 +00:00
Lasse R.H. Nielsen 0808d29b4e Update spec of potentially constant and compile-time constant expressions.
The existing specification was underspecifying potentially constant expressions,
effectively relying on evaluation to determine whether an expression was
potentially constant.

This change specifies potentially constant recursively using only the syntax
of the expressions.

Adds short-circuting to `?:`, `??`, `||` and `&&` expressions,
so for `String x`, the expression `x != null && x.length > 0`
is compile-time constant.
The original specification requred evaluation of the latter half
even when `x` is null. We can now avoid this because we can require that the
unused expression is a potentially constant expression without having to
check if it, or any part of it, is a compile-time constant expression.

Allows `x == null` and `x != null` as compile-time constant expression
independently of the type of `x`.

Allows `e as T` as a compile-time constant expression. Types are more
important in Dart 2, so you need a way to adjust typing in some cases,
even in compile-time constant expressions.

Change-Id: I02bf0b77013c3b3ced8cd46334db378787cc2d57
Reviewed-on: https://dart-review.googlesource.com/36220
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2018-09-26 14:17:39 +00:00
Erik Ernst e05f1fc32d Adjusted superclasses to make a mixin application superclass abstract
We should avoid the situation where `class C extends A with M {}`
requires generation of noSuchMethod forwarders _in the superclass
`A with M`_ when neither `A` nor `M` has an implementation of
`foo`, but `A with M` has a non-trivial noSuchMethod.

If we _do_ generate those nSM forwarders, that will just obscure that
any attempt to invoke `super.foo()` in `C` should be an error.

Note that this is about generating forwarders _in the mixin application
which is the superclass_, it is not about copy-down of forwards from
the class `M` that was used to obtain the mixin in the first place.

Also note that it would be inconvenient to require all methods to be
implemented in `A with M` as used in `abstract C extends A with M {}`,
and it would also be rather funny if we were to say that `A with M` is
abstract when `C` is abstract, and concrete when `C` is concrete.

So I think the only reasonable choice is to make those superclasses
which are mixin applications abstract.

Note that dart:mirrors ought to reflect this, in a separate issue,
if it is not already the case.

Change-Id: If221b2c73b17bd55017d4d5ee4fdb8daf203e195
Reviewed-on: https://dart-review.googlesource.com/76640
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-26 13:44:28 +00:00
Erik Ernst 4816b607a5 Eliminate checked mode and production mode
Also update type dynamic and other sections especially affected.

Change-Id: I432992b8190f13b2aea73d524fc9b17d3ef24b41
Reviewed-on: https://dart-review.googlesource.com/75340
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-26 13:13:26 +00:00
Erik Ernst f4dfb6176f Corrected the "reusing part" error to take exports into account.
Also corrected some "includes" to "has" when talking about members of
an interface.

Change-Id: Ib8917c2a9f40fce82ab1e41e0e766c87065b168a
Reviewed-on: https://dart-review.googlesource.com/75880
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-24 10:07:46 +00:00
Erik Ernst c3c4e63ce4 Adjusted spec to use package syntax, thus eliminating bnf.sty
Also fixed many syntax related glitches.

Change-Id: I926b93a54ad28d05389a44c969fc2288933f8584
Reviewed-on: https://dart-review.googlesource.com/75580
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-20 11:12:14 +00:00
Erik Ernst 5af9844382 Language specification reorganization.
---------------- NEW description (old description shown at end):

This CL is now a reorganization, problem fixing, clarifying update
to dartLangSpec.tex which was created as part of the work on the
rules for call method extraction. That is, all the call method
extraction specific elements have been _deleted_ from this CL
(they will reappear as a separate CL later). This CL is now only
performing "general clean-up work" which is needed in order to
perform many kinds of updates (including call method extraction,
but also anything else where the dynamic semantics depends on the
static analysis & desugaring).

------------------------------------------------ OLD description

Introduced rules for call method extraction.

The previous update to dartLangSpec.tex dealt with invocations, but
omitted the transformation whereby `e` becomes `e.call` when `e` has
a type which is a class with a `call` method and the context expects
a value of type `Function` or of a function type. This CL adds some
rules dealing with that and introduces a concept for the transformation
itself.

One part is missing for the initial patch set: There are no rules
specifying that call method extraction should be applied to actual
arguments. The problem is that static checking of actual arguments
to various invocations (function expression invocation, ordinary
method invocation, super invocation, etc.etc.) seems to be "delegated"
partially to section `Binding Actuals to Formals`, but that section
never defines the syntax for the function which is being invoked and
it is in general rather dynamic in nature. So I'm not quite sure
that the references to static checking at the end of that section
are located optimally.

Some adjustments may therefor be needed before we can specify this
particular feature for actual arguments.

Change-Id: Ia2ab6f16cd50e10a3c467722035f0dc4adb50587
Reviewed-on: https://dart-review.googlesource.com/51323
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-17 11:39:24 +00:00
Lasse R.H. Nielsen b9cb904a2d Fix typo in int-to-double.md
Fixes #34449.

Bug: http://dartbug.com/34449
Change-Id: Ib2103e4340f7cc2267e71690ce0f7f60a7b453e4
Reviewed-on: https://dart-review.googlesource.com/74621
Reviewed-by: Erik Ernst <eernst@google.com>
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
2018-09-12 12:47:15 +00:00
Lasse R.H. Nielsen d6bec62322 Add tests for implicit conversion of integer literals to double values in a double context.
Planned for Dart 2.1.

Change-Id: I0cc7c6f4ea654cbb66b1542b0bc6e0c32728be12
Reviewed-on: https://dart-review.googlesource.com/47880
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2018-09-11 11:50:44 +00:00
Paul Berry e2fdd57664 Clarify ambiguous definition of constant interpolated string expressions.
The previous phrasing ("A constant expression is ... a literal string
where any interpolated expression is a compile-time constant ...") was
ambiguous: did it mean "... where at least one interpolated expression
is a compile-time constant ..." or did it mean "... where every
interpolated expression (if there are any) is a compile-time constant
..."?

Clearly the intended meaning is that all interpolated expressions are
required to be compile-time constants, otherwise we would allow
nonsense like this:

  void f(int i) {
    const x = 0;
    const s = "$x $i"; // Ok because x is const (!)
  }

Changing the word to "every" avoids the ambiguity.

Change-Id: I3a1dd38a8bc0dc9cddc7b504ea8e7de5afdf8990
Reviewed-on: https://dart-review.googlesource.com/74321
Reviewed-by: Leaf Petersen <leafp@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-09-10 22:56:10 +00:00
danrubel 4ef1ad0644 Update the language spec to allow with clause without an extends clause
This updates the Dart language spec to allow
```
   class C with M
```
where currently the above declaration would require `extends Object`.

Change-Id: Ibb5834b264be7b2c5adb79dfa9a24ad5e1fa539a
Reviewed-on: https://dart-review.googlesource.com/73684
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-09-08 04:49:47 +00:00
Erik Ernst f071f7ce64 Updated the status of each feature specification as needed
Change-Id: I23c7e77ac64ce2cad288f42505ccf07257f00abc
Reviewed-on: https://dart-review.googlesource.com/71861
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-07 07:03:52 +00:00
Leaf Petersen 9883fcca08 Fix valid_returns tests.
The valid return tests were misnamed and hence not run.  Also remove
duplicate tests from one file, and add status to the informal proposal.

Change-Id: I20179e81a0281302056f601ee3b7a51e2aec180e
Reviewed-on: https://dart-review.googlesource.com/73562
Commit-Queue: Leaf Petersen <leafp@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-09-06 20:37:06 +00:00
Erik Ernst 52f2241a02 Added int-to-double.md
A rendered version of patch set 17 of this CL is available here:
https://gist.github.com/eernstg/a70884d5249abbecb68d7771cb18ae37.

Change-Id: If175f1787c11603bb4ed9bf89181cd8585afa54f
Reviewed-on: https://dart-review.googlesource.com/68683
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-06 09:54:56 +00:00
Erik Ernst 1acf6f768d dynamic-members.md: Make d.hashCode() and d.runtimeType() an error
A rendered version of the document as of patchset 18 is available here:
https://gist.github.com/eernstg/fc0094b0230ea18b9507092e50dab537

Change-Id: Iad21bd3e8f31847cfdc0a217249de44d5424e2b4
Reviewed-on: https://dart-review.googlesource.com/72700
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-04 15:24:41 +00:00
Erik Ernst 9388cb3d0c Removed rule against return; & return e; in same function
Change-Id: I8b2e1bc5b8003b7a6fb4b6660f268a42995046dc
Reviewed-on: https://dart-review.googlesource.com/71780
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-08-28 09:21:20 +00:00
Daniel Hillerström 65b8ab114c Fixes a bad escape.
\; caused the following compilation error

  ! Missing $ inserted.
  <inserted text>
                $
  l.7845 }

I have removed the backslash, and placed the semicolon between a pair
of $ to make it render like the one in the grammer-environment.

Change-Id: If57e61f61b460d159b6f14d70c9c9f343114cf70
Reviewed-on: https://dart-review.googlesource.com/71760
Commit-Queue: Daniel Hillerström <hillerstrom@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2018-08-28 09:16:04 +00:00
Lasse Reichstein Holst Nielsen f6242cb100 Disallow expressions statements starting with {.
The current specification only prohibits expressions statements where the
expression *is* a map, not those that *start with* a map.
Implementations have always rejected those starting with a map.

Bug: http://dartbug.com/725
Change-Id: I805a6f82d1afdcf335aff73e74dac1f14e5a6afe
Reviewed-on: https://dart-review.googlesource.com/71247
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2018-08-27 12:43:56 +00:00
Erik Ernst 9282a34aea Corrected specification of dynamic checks on redirecting factories
Change-Id: Ic044a003c73dea58539d090e82ab251f0d664efa
Reviewed-on: https://dart-review.googlesource.com/71140
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-08-22 10:58:49 +00:00
Leaf Petersen f88582e74f Improve wording in invalid return spec per comments.
Change-Id: I78f94a2e36c5ba8156fffc840e7bc8a9dd6aeafb
Reviewed-on: https://dart-review.googlesource.com/70542
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-08-20 18:19:22 +00:00
Erik Ernst 9085009f2a Adjusted type variable name conflicts to match class member rules
Change-Id: I4e6c20fd255f349a295a771fcaca5b2db6d868cb
Reviewed-on: https://dart-review.googlesource.com/70508
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-08-20 13:57:08 +00:00
Erik Ernst be0969b249 Specify that superinitializers must come at the end
Change-Id: Ieb18db54ee0e3e25e17364c8c36feda34efdefea
Reviewed-on: https://dart-review.googlesource.com/67804
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-08-20 13:30:37 +00:00
Erik Ernst 1a2532ce31 Adjusted end of 10.6 about constant object expressions
Change-Id: Ia6890d6620ed8cff060a30fa90f6cd05fbcc2057
Reviewed-on: https://dart-review.googlesource.com/70621
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-08-20 12:04:24 +00:00
Leaf Petersen 891b7164ac Fix overly strict invalid return checking.
In changing the proposed spec to address comments in a way that was intended to be
non-breaking, I accidentally introduced some new (unintended) restrictions.  This
fixes the spec, rolls back the change in analyzer, and adjusts the language tests
appropriately.

Change-Id: I487b0eaacbfa1447d4ee909c0a56e435c2088990
Reviewed-on: https://dart-review.googlesource.com/70462
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2018-08-17 01:25:18 +00:00
Lasse Reichstein Holst Nielsen d14b256e35 Specify integer literals in double context.
Also remove 64-bit constraint on integer literals when compiling to JavaScript.
Effectively, all integer literals are treated the same way when compiling to JavaScript numbers.

Change-Id: Ib625457d65c40600291edbf391c82f37ad27701a
Reviewed-on: https://dart-review.googlesource.com/70144
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2018-08-16 14:34:48 +00:00
Sam Rawlins 98c8cfc827 Add note to language/informal deprecating the directory
Change-Id: I2b2d564f994f5680608607b369a7b2b45d8a2154
Reviewed-on: https://dart-review.googlesource.com/69640
Reviewed-by: Leaf Petersen <leafp@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2018-08-14 01:03:48 +00:00
Leaf Petersen 75f92ac8fe Point old super mixin informal spec to canonical copy
Change-Id: I96618343c4a60c906bddcb15f2cd10996f097dff
Reviewed-on: https://dart-review.googlesource.com/68849
Reviewed-by: Erik Ernst <eernst@google.com>
2018-08-08 17:07:47 +00:00
Erik Ernst 0c187585c5 Added return-void-2-dynamic to whitelist of generalized-void.md
We need to clarify the following case:
`dynamic foo() => print('');`,
`dynamic bar() { return print(''); }`
that is, using `return e` where `e` has type `void`, when the return
type of the enclosing function is `dynamic` (inferred or explicit).

We do not currently have any elements in the generalized-void.md
whitelist for that, so it's an error. However, invalid_returns.md
from https://dart-review.googlesource.com/c/sdk/+/60401 implies
(patchset 6: line 19-20 and 34-35) that it is allowed.
It is my impression that we agree on invalid_returns.md, and also
that it describes the current behavior (maybe not 100%?).

This indicates to me that we should, probably, add an element to
the above-mentioned whitelist to allow it.

This CL makes that change to generalized-void.md.

Change-Id: I0326081960deda907b3b4ff34bd2d60f7c9dc35b
Reviewed-on: https://dart-review.googlesource.com/64341
Reviewed-by: Erik Ernst <eernst@google.com>
2018-08-01 12:18:07 +00:00
Erik Ernst 6920d6b11e Added specification of generated nSM forwarders for private methods
The issue was raised recently that there must be generated forwarders
for some method signatures that we had not previously mentioned in
nosuchmethod-forwarders.md: Private methods with an inaccessible name,
that is, private methods declared in a different library than the
current target of nSM forwarder generation.

Given that such forwarders are semantically significant (a tear-off
performed in the library where the abstract private method declaration
is located would tear off a generated forwarder, rather than causing
an invocation of `noSuchMethod`), we need to specify this.

This CL adds such a specification to nosuchmethod-forwarders.md.

This CL addresses SDK issue #33725, and SDK issue #33727 is related
being concerned with the implementation in the common front
end.

Change-Id: Iedbcdd8b4c8df95c6038022f72b3211ec1b76649
Reviewed-on: https://dart-review.googlesource.com/64380
Reviewed-by: Erik Ernst <eernst@google.com>
2018-08-01 12:00:28 +00:00
Lasse R.H. Nielsen 61148eade8 Update mixin-declaration feature specification.
Change-Id: I0c4d2a3e49eb90758ac854a20c5ba5424f32ad3b
Reviewed-on: https://dart-review.googlesource.com/51640
Reviewed-by: Leaf Petersen <leafp@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2018-07-30 23:45:42 +00:00
Leaf Petersen 73663ae7c6 Allow void on the RHS of null coalescing expressions
Change-Id: I2e2d16c890c735260669d60725085861e66996aa
Reviewed-on: https://dart-review.googlesource.com/67081
Reviewed-by: Erik Ernst <eernst@google.com>
2018-07-30 17:44:40 +00:00
Leaf Petersen 02ba125a14 Add informal spec for invalid returns.
This mostly documents and regularizes existing (post bug fix) semantics,
with a small additional restriction on returning `void` from an async
function.

Change-Id: Ic1a302aeb666fa73ca2b7e23072394490bb4fe76
Reviewed-on: https://dart-review.googlesource.com/60401
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-07-26 22:07:14 +00:00
Erik Ernst b8098e9683 Added new feature spec generic-function-instantiation.md.
This CL adds a new feature specification for 'generic function
instantiation' (aka partial specialization, type-curried invocation,
etc.), which amounts to implicitly obtaining a non-generic function
from a denotation of a generic function when the typing requires the
latter.

This feature spec relies on type inference, but as a black box (so
it can hardly be incompatible with any current or future version of
type inference in Dart).

Note that it is a restricted version of generic function
instantiation which is specified here, it only supports global and
static functions and instance methods; function literals and first
class function values are not supported.

I just learned from Vijay (Mar 23, 3pm CET) that first class functions
_do_ support generic function instantiation in some existing
implementations. So maybe there is no problem supporting them, and
we should just eliminate that restriction?

Here is a rendered version of the document, refreshed to match patch
set 19: https://gist.github.com/eernstg/bf816d3495e9b87ab6eb958ba707d016

Change-Id: Ie1fd601d3e359bfb5f4616f8ec68a110f42e01b7
Reviewed-on: https://dart-review.googlesource.com/47043
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-07-11 14:49:58 +00:00
Erik Ernst f55e23a6b8 Fixed obsolete reference about member conflicts
Change-Id: If54ea6b2fca675e866f5561a2cf575a6cefb9aa8
Reviewed-on: https://dart-review.googlesource.com/64521
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-07-11 11:46:43 +00:00
Erik Ernst 715d59779e Added specification that redirecting constructors must be checked.
The current specification seems to allow (or even mandate) that a
redirecting constructor (factory or generative) must be considered as a
syntactic shorthand for an invocation of the redirection target, with
no checks applied statically or dynamically according to the
declarations in the redirected constructor. So the following would be
OK:

  class A {
    A(num n) { print(n); }
    A.foo(int i): this(i);
  }

  main() => new A.foo(3.0);

This CL changes dartLangSpec.tex to mandate all the checks (static
and dynamic) for the declaration of the redirecting constructor as
well as each one of the redirection targets.

Note that the analyzer already rejects the above program, which
lessens the disruption and the implementation burden, but compilers
would presumably need to have the dynamic checks implemented.

Underlying issues: https://github.com/dart-lang/sdk/issues/31590,
https://github.com/dart-lang/sdk/issues/32049,
https://github.com/dart-lang/sdk/issues/32511.

Change-Id: Icc15da6b817e4e678cdfc8829a1e06458756eb4b
Reviewed-on: https://dart-review.googlesource.com/28140
Reviewed-by: Leaf Petersen <leafp@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-07-10 12:41:24 +00:00
Erik Ernst a07b2a10c6 Changed all warnings to errors in the language specification.
Change-Id: Ia4db56ad90f91edb711f726fc0ca214a125b39d8
Reviewed-on: https://dart-review.googlesource.com/56497
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2018-07-04 17:46:30 +00:00
Erik Ernst b803d74c9b Adjusted errors for FutureOr in class headers
We did not previously prevent `class C implements FutureOr<int> ..` and
similar declarations. However, it offers only very little value to
allow this, and possibly creates some complications. This CL makes all
these subtype relationships a compile-time error.

The wording of the constraint on `\WITH{} clause` was also adjusted to
remove some potential interpretations which are unintended (like
preventing `with List<dynamic>`, which should be OK).

Change-Id: I626c2767befa7a3cb3092b0ba5cb463e9456d431
Reviewed-on: https://dart-review.googlesource.com/63583
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-07-03 12:08:31 +00:00
Erik Ernst 4fd04044fb Adjusted circularity prevention rule for type variable subtyping
We noted in issue https://github.com/dart-lang/sdk/issues/33709 that
the language specification prevents usage of `Null` as the bound
of a type variable, because that makes the bound a subtype of
the type variable itself (which is otherwise a symptom of having
a cyclic declaration like `X extends X`).

This CL adjusts the wording such that it will be possible to use
`Null` (or whatever the denoteable bottom type is called) as a
bound.

Change-Id: I46a5ce6055f3af322a6b93ac38ca2829ce23a26c
Reviewed-on: https://dart-review.googlesource.com/63420
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-07-03 10:55:50 +00:00
Lasse Reichstein Holst Nielsen 5fab3242f4 Update boolean conversion section of the specification to Dart 2.
Change-Id: I2760f333c96470dd3a58dc8d9c389a5c1242a83f
Reviewed-on: https://dart-review.googlesource.com/63384
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2018-07-02 15:04:23 +00:00
Lasse R.H. Nielsen b43dc893eb Remove spec references to Symbol constructor.
Change-Id: I3c6fe9d27aad387a55f9a003d94faa6a9a72f227
Reviewed-on: https://dart-review.googlesource.com/44741
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2018-06-27 13:53:47 +00:00
Lasse R.H. Nielsen 28ed0d743d Make it explicit that "dynamic" is exported from dart:core.
Change-Id: I15a0716fdfe83da248dc4380d5550318f80a1c98
Reviewed-on: https://dart-review.googlesource.com/25420
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2018-06-27 13:12:02 +00:00
Erik Ernst 5d4dbdac5c Adjust stringContentTDQ, stringContentTSQ to allow escapes.
Bug: 33090.
Change-Id: Id8c0d26a4f4072a97cc71c8f3f05f0694c304491
Reviewed-on: https://dart-review.googlesource.com/61923
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-06-25 13:50:10 +00:00
Lasse R.H. Nielsen e2c54e9af5 Fix cascade specification.
Don't use $e$ for two different things, and specify static type.

Fixes #19517.

Bug: http://dartbug.com/19517
Change-Id: Ieb30fc05dc305f25526b05b2005a1a81a88e2009
Reviewed-on: https://dart-review.googlesource.com/61881
Reviewed-by: Erik Ernst <eernst@google.com>
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
2018-06-22 13:33:48 +00:00
Erik Ernst d7e5332057 Make dual use of a part in the same program an error.
The text still uses "with the same URI" as a proxy for "being the
same library" (as it always did). We may wish to change that to
something which will catch the case where different URIs denote the
same library.

Note that this is concerned with the specification,
the feature has been implemented in
https://github.com/dart-lang/sdk/commit/08de1b30aa50454b41452d45c29d130a44649cd3.

Closes-bug: #33225
Change-Id: I678379e98a98c2a021ce2e02c8d942c074ff583c
Reviewed-on: https://dart-review.googlesource.com/60660
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-06-19 13:08:09 +00:00