This bug was only happening for the --fast-startup.
For most browsers we simply change the '__proto__' and the order wouldn't be important. However, for the other browsers we have to do it in order.
R=sigmund@google.com
Review URL: https://codereview.chromium.org//1347423003 .
Setting receiverIsNotNull, objectIsNotNull in the analysis pass
simplifies the transformation pass since predicates like
'isSafeForElimination' depend on them.
This would prevent constant folding of array lengths since
GetLength was not marked as safe for elimination at the
time it was considered for constant folding.
BUG=
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//1348233002 .
Still under a 'flag'.
Enable with:
DART_VM_OPTIONS=-Dunreachable-throw=true <compile>
These tests fail with an [empty] input to createRuntimeType.
DART_VM_OPTIONS=-Dunreachable-throw=true tools/test.py -mrelease -cdart2js -rd8 dart2js_extra/deferred/deferred_mirrors1_test
DART_VM_OPTIONS=-Dunreachable-throw=true tools/test.py -mrelease -cdart2js -rd8 dart2js_extra/mirrors_used_warning2_test
R=sigmund@google.com
Review URL: https://codereview.chromium.org//1355873003 .
When I was experimenting with inlining, I triggered a violation of the Tree
integrity checker after variable merging, because variable uses in the
typeInformation were not rewritten.
R=asgerf@google.com
BUG=
Review URL: https://codereview.chromium.org//1356903002 .
* Type annotations were not correct anymore, since we refactored type
propagation.
* Continuations were not decorated. This meant that they weren't marked
with '**' when they caused an integrity violation.
* There was a bug in the arity of calls to _currentIsolate that manifested
when trying to build the argument list string.
* Formatting needed some small cleanups.
R=karlklose@google.com
BUG=
Review URL: https://codereview.chromium.org//1345983007 .
Type inference uses the closure tracer to decide whether it has sufficient global
information to compute an actual type on a closure. If tracing fails, it will
abandon type inference for that closure. However, we no longer fail tracing just
because a closure flows into Function.apply, as this still means that we have
seen all use sites. Unfortunately, type inference does not understand that
Function.apply is actually a call site (and we lack other information to make
this knowledge worthwhile). So it concludes that the closure is never called.
With this fix, it now correctly abandons inference again.
The second issue was that we only take default values into account when looking
at a call site (so that we only use them if they are actually used). This can be
decided statically unless we loose track or there is a call to Function.apply.
I have added an extra edge to the use-graph so that there now always is a use
edge from a default to the parameter. While this is conservative, it will only
affect tracing and thus only the types of traced entities that are used as
default should be impacted.
BUG= http://dartbug.com/24297R=sigmund@google.com, sra@google.com
Review URL: https://codereview.chromium.org//1355563002 .
This should resolve an outstanding issue with unreachable code being
transformed. A subterm in the unreachable code would get specialized
and then reanalyzed while some of the definitions in scope have no type.
This changes a lot of test case results. Some test results
have changed in very surprising ways, but I would argue
these are separate bugs that we should hunt down.
BUG=
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//1335273003 .
This should make it easier to use type information in other passes.
Some passes have been adapted to update the type field, even though it
is still only used in type propagation.
Refinement nodes are still removed pretty early since most passes are
not prepared to deal with them.
BUG=
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//1305863010 .