Previously, anonymous libraries would have an empty name when loaded
from Dart, but a null name when loaded from binary.
The textual printer will use synthetic names for null, but not for empty
names, so we should prefer null.
BUG=
R=kmillikin@google.com
Review URL: https://chromereviews.googleplex.com/419187013 .
If an index assignment occurs where its result is used, we bind
the value in a 'let' to reuse the value.
For example:
return x[y] = z
would become:
return let #x = x
in let #y = y
in #x.[]=(#y, z)
but now becomes:
return let #x = x
in let #y = y
in let #z = z
in let #dummy = #x.[]=(#y, #z)
in #z
It clearly looks worse, but it makes the semantics of MethodInvocation
node a lot more uniform when there is no special case for invoking a
method named '[]='.
Some analyses can perform special treatment of 'this' accesses, so we
should preserve them when desugaring.
For example:
this.foo += 1
would become:
let #1 = this in #1.foo = #1.foo.+(1)
but now instead becomes:
this.foo = this.foo.+(1)
Redirecting factories are desugared to a factory procedure with a
return and call in the body.
Constant calls to a constant redirecting factory are redirected at the
call-site to the effective target, which must be a constant constructor.