Johnni Winther
8053c43dde
Compute static types for for-in loops
...
Change-Id: I47e98eaf6df7d04286cb737bfdff135e6c0d34d2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/100843
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2019-05-01 14:06:39 +00:00
Johnni Winther
45a5349175
Track constant field initializers for field analysis.
...
Change-Id: I536975d235cbf7722b03aa7b0e2c9edd7c206484
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98852
Commit-Queue: Sigmund Cherem <sigmund@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2019-04-09 16:30:27 +00:00
Johnni Winther
da0de0a867
Handle native field impact correctly from ir constants
...
Change-Id: I0393fd57b78c7cb417888ec3e0ff139b888bf3a3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98322
Reviewed-by: Sigmund Cherem <sigmund@google.com >
Commit-Queue: Johnni Winther <johnniwinther@google.com >
2019-03-29 16:41:55 +00:00
Johnni Winther
87c553bf3c
Ascribe constants to the member world impacts
...
Change-Id: I978a6453196b47dd4ed5f51dde1d81feaa4f2008
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97502
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2019-03-22 12:58:40 +00:00
Johnni Winther
9c9ab11450
Reland "Handle ir constants in field analysis and impact tests"
...
Include initial handling of unevaluated constants from environment.
Change-Id: I288801b42a9e25e440baa3eac9ce88263acea0a7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97241
Reviewed-by: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Auto-Submit: Johnni Winther <johnniwinther@google.com >
2019-03-18 17:57:55 +00:00
Aske Simon Christensen
e62391a162
Revert "Handle ir constants in field analysis and impact tests"
...
This reverts commit 0cd89e5bd1 .
Reason for revert: Conflicts with move of constant evaluator.
Original change's description:
> Handle ir constants in field analysis and impact tests
>
> Include initial handling of unevaluated constants from environment.
>
> Change-Id: Ibd330a14dfabad1dee95b64ce7015939412374d3
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97112
> Commit-Queue: Johnni Winther <johnniwinther@google.com >
> Reviewed-by: Sigmund Cherem <sigmund@google.com >
TBR=johnniwinther@google.com ,sigmund@google.com
Change-Id: Ie01c7dda6152abbf852cd40a00597f019db49e66
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97116
Reviewed-by: Aske Simon Christensen <askesc@google.com >
Commit-Queue: Aske Simon Christensen <askesc@google.com >
2019-03-18 13:01:11 +00:00
Johnni Winther
0cd89e5bd1
Handle ir constants in field analysis and impact tests
...
Include initial handling of unevaluated constants from environment.
Change-Id: Ibd330a14dfabad1dee95b64ce7015939412374d3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97112
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2019-03-18 10:30:04 +00:00
Johnni Winther
440b4cd84e
Insert implicit casts when setting interface targets
...
This preserves the invariant that method invocations and property sets
with an interface target handle static types at the call site.
This is a prerequisite to improving dart2js with implicit checks.
With this we can mark dynamic invocations a statically safe and
discover when instance methods don't need to check parameter types.
Change-Id: Ife7a3f947952b3c1f73316b922b2aa107343068e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/95400
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2019-03-11 13:08:34 +00:00
Johnni Winther
966e007b63
Pass CallStructure on dynamic and static use in ResolutionWorldBuilder
...
This is a preparation for using the collected call structures to inline
optional parameters that are never passed a call sites.
Change-Id: I9603f931967cbab53e9593dc19b29ad3ce717fa3
Reviewed-on: https://dart-review.googlesource.com/c/89549
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2019-01-16 09:16:19 +00:00
Johnni Winther
b61a085c60
Use custom thisType to signal static type precision.
...
This also removes the dependency on the state (!) in ir.TypeEnvironment.
Change-Id: I0180d111ecf45b685c4abce12c6a9bd52c1f308e
Reviewed-on: https://dart-review.googlesource.com/c/88968
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2019-01-11 12:17:14 +00:00
Johnni Winther
7b2aae5498
Handle dynamic/instance access in ir/impact.dart
...
Change-Id: Iaae339550bc5f693d592012e1798c9e64002f4ec
Reviewed-on: https://dart-review.googlesource.com/c/88965
Reviewed-by: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
Commit-Queue: Johnni Winther <johnniwinther@google.com >
2019-01-11 09:30:38 +00:00
Johnni Winther
cff0d20247
Use better static types for RuntimeTypeUse
...
+ remove the use ir.Expression.getStaticType
Change-Id: I4fa7908e44505b9336cd366a2025f20a7ba45a59
Reviewed-on: https://dart-review.googlesource.com/c/88834
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2019-01-11 09:14:27 +00:00
Johnni Winther
3d7ca147a4
Add FeaturesDataInterpreter
...
Change-Id: I40a7baca235c2e729629f4330d8d51f148264ece
Reviewed-on: https://dart-review.googlesource.com/c/88963
Reviewed-by: Sigmund Cherem <sigmund@google.com >
Commit-Queue: Johnni Winther <johnniwinther@google.com >
2019-01-11 08:11:09 +00:00
Johnni Winther
477de6b84b
Cleanup unittests
...
- remove use of '_strong', '_trust', and '_checked' suffices
- test omit-implicit-checks by default
Change-Id: I2a83f6fb23a22c894cc7867c51ab460abb4cc524
Reviewed-on: https://dart-review.googlesource.com/c/88454
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2019-01-07 15:01:10 +00:00
Johnni Winther
e14472c46b
Use getters/setters found through the static types.
...
This uses the information from the static types now used in inference which
can improve the precision in particular for generic classes. Since type
masks lose the type argument information, we cannot expect locating members
based on the type mask to be more precise than what has been found through
the static types.
This CL also expands the unit test framework to support unit test of
optimizations and the emission model, including tests of the improved
field access handling.
Closes #35433
Change-Id: Ia5de15efaf8b60c8723943bb34de6eec7d380798
Reviewed-on: https://dart-review.googlesource.com/c/88440
Reviewed-by: Stephen Adams <sra@google.com >
2019-01-07 15:01:10 +00:00
Johnni Winther
c987c9e5a7
Propagate cached static types to inference and ssa
...
+ use it to skip unnecessary casts.
Change-Id: Ib503a6fb74907f7e6367c8ee44548268e03045cf
Reviewed-on: https://dart-review.googlesource.com/c/86560
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2018-12-07 19:57:05 +00:00
Johnni Winther
c18225d98c
Implement guarded type promotion in dart2js
...
Change-Id: Ic284990c73ff5cb4b201ed4bbcc57ec0d7b0b66f
Reviewed-on: https://dart-review.googlesource.com/c/85923
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2018-12-05 11:52:26 +00:00
Johnni Winther
82f9884289
Support exact class and this expression relations in StrongModeConstraint
...
Change-Id: I32e6e5b6f55d4ef4240b6ba87eb26dfc2a699130
Reviewed-on: https://dart-review.googlesource.com/c/85166
Reviewed-by: Sigmund Cherem <sigmund@google.com >
Commit-Queue: Johnni Winther <johnniwinther@google.com >
2018-11-27 13:50:04 +00:00
Johnni Winther
e62951fd3d
Use assigned variables data to infer static types for effectively final locals.
...
Change-Id: I3687d28628b0476c6a848f135bbda97e594449c2
Reviewed-on: https://dart-review.googlesource.com/c/84629
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2018-11-21 09:16:21 +00:00
Johnni Winther
225b8d5075
Specialize Object properties in static type computation
...
This normalizes all accesses of Object properties on dynamic receivers
to target the corresponding Object members.
CFE already set the interface target on for instance `a == b` where `a`
has static type `dynamic` but didn't for the implicit call to `==` in
for instance `a?.b`.
Change-Id: I4f714766ac33a431f5ef645df7ee1bbb254c06ce
Reviewed-on: https://dart-review.googlesource.com/76123
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Stephen Adams <sra@google.com >
2018-09-27 09:51:01 +00:00
Johnni Winther
1652850381
Compute static types during impact computation
...
This speeds up the computation of static type by avoiding repeated
visits of subtrees. The change also paves the way for improving
static type computation beyond what is specified. For instance by
handling negative type promotions.
Change-Id: Ifa3ea0f9760251f43cbbcc97b684004741a97b11
Reviewed-on: https://dart-review.googlesource.com/76020
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Stephen Adams <sra@google.com >
2018-09-25 09:58:19 +00:00
Johnni Winther
bb56d4592f
Fix receiver type for js-interop access
...
This includes the unknown potential targets of access to js-interop
members. Since we don't know actual classes implementing the js-interop
classes we just assume it could be any of them.
Change-Id: I4d91ab673fa8221eb701b34e9c32fd16e5a1c381
Reviewed-on: https://dart-review.googlesource.com/74980
Reviewed-by: Stephen Adams <sra@google.com >
Commit-Queue: Johnni Winther <johnniwinther@google.com >
2018-09-14 16:56:44 +00:00
Johnni Winther
5e263044e8
Enable StrongModeWorldStrategy
...
This makes closed world computation take the static type of the receiver
into account and removes non-live members from the J-world.
Change-Id: I5547aaae4685c6417a94916df0bc4e621296ce8d
Reviewed-on: https://dart-review.googlesource.com/72643
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Stephen Adams <sra@google.com >
2018-09-10 07:09:07 +00:00
Johnni Winther
760a9690c2
Remove tests irrelevant for Dart 2
...
Change-Id: Iedbab2ce11d7446ce28546f06ad97fd909f389c6
Reviewed-on: https://dart-review.googlesource.com/71404
Reviewed-by: Stephen Adams <sra@google.com >
Commit-Queue: Johnni Winther <johnniwinther@google.com >
2018-08-29 07:29:38 +00:00
Johnni Winther
185eec12a6
Avoid crash on falsely enqueued .call methods.
...
Change-Id: Ib58b02eecfc697f70e74cbb9f5e5816fb936a31b
Reviewed-on: https://dart-review.googlesource.com/71400
Reviewed-by: Stephen Adams <sra@google.com >
2018-08-29 07:29:38 +00:00
Johnni Winther
2c3e093208
Register implicit .call invocations.
...
Change-Id: I3dbfbe8d974474aaf8488a4432eeb988bc380be6
Reviewed-on: https://dart-review.googlesource.com/69966
Reviewed-by: Stephen Adams <sra@google.com >
2018-08-17 12:05:48 +00:00
Johnni Winther
f59389b688
Optimize .runtimeType impact based on usage
...
Change-Id: If6c24d4115241dcb8ac2ed82eee58c4025e3d8e2
Reviewed-on: https://dart-review.googlesource.com/59090
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2018-06-15 19:51:14 +00:00
Johnni Winther
c39c2c8ac1
Handle type variables in optional function typed parameter in jsinterop methods
...
Closes ##33162
Change-Id: If31e7c793cc9312e584817cf4c373b8f10ff3bc1
Reviewed-on: https://dart-review.googlesource.com/58460
Reviewed-by: Stephen Adams <sra@google.com >
Commit-Queue: Johnni Winther <johnniwinther@google.com >
2018-06-06 11:06:10 +00:00
Johnni Winther
3fc7925894
Add impact_test
...
Change-Id: Ic607d69375d1ad41f6aac349822e47c7dbf77b5a
Reviewed-on: https://dart-review.googlesource.com/54906
Commit-Queue: Johnni Winther <johnniwinther@google.com >
Reviewed-by: Sigmund Cherem <sigmund@google.com >
2018-05-15 13:53:56 +00:00