Karl Klose
3fe9309c96
dart2js cps: Implement compilation of redirecting factory constructors for reflection.
...
Without reflection, redirecting factory constructor invocations are shortcut at the instantiation site. With reflection, code like
reflectClass(Foo).newInstance(const Symbol(''), [])
can hit a redirecting factory constructor and we need to emit a function that does the redirection and type substitution.
R=asgerf@google.com
Review URL: https://codereview.chromium.org//1227873004 .
2015-07-09 14:54:23 +02:00
Karl Klose
71e2bec0a5
dart2js cps: Support JS_CURRENT_ISOLATE.
...
R=asgerf@google.com
Review URL: https://codereview.chromium.org//1222913003 .
2015-07-07 15:55:13 +02:00
Lasse R.H. Nielsen
469d541f31
Don't expect 0.gcd(0) to throw in bigint test.
...
Review URL: https://codereview.chromium.org//1224643003 .
2015-07-07 11:11:42 +02:00
Lasse R.H. Nielsen
3c976019cc
Make int.gcd accept zero as an operand, including both operands being zero.
...
R=floitsch@google.com , regis@google.com , sgjesse@google.com
Review URL: https://codereview.chromium.org//1211473002 .
2015-07-07 09:51:13 +02:00
Asger Feldthaus
61f47e7384
dart2js cps: Ensure JSArray is emitted when we see a type cast.
...
This is a workaround to resolve an issue that is affecting a lot
of tests.
BUG=
R=floitsch@google.com
Review URL: https://codereview.chromium.org//1214123003 .
2015-07-03 14:32:01 +02:00
Lasse R.H. Nielsen
ede6cb71a5
Make modInv throw Exception on incompatible operands.
...
Also update errors to be more descriptive accross the integer methods.
I'm still considering whether a more precise "NotCoPrimeException" would be better.
R=regis@google.com , sgjesse@google.com
Review URL: https://codereview.chromium.org//1209523002 .
2015-06-30 14:46:14 +02:00
Asger Feldthaus
34302b1320
dart2js cps: Translate synthesized mixin constructors.
...
BUG=
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//1216593002 .
2015-06-29 15:28:40 +02:00
Asger Feldthaus
ec55d46148
dart2js cps: Fix translation of local constants.
...
BUG=
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//1211393003 .
2015-06-29 14:32:49 +02:00
Lasse R.H. Nielsen
3a0edfba72
Add tests for gcd, modInverse and modPow that also run on dart2js.
...
R=regis@google.com , sgjesse@google.com
Review URL: https://codereview.chromium.org//1205363003 .
2015-06-26 11:05:11 +02:00
Asger Feldthaus
fceb7f00dc
dart2js cps: Handle checks against mutable and extendable lists.
...
BUG=
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//1206873003 .
2015-06-25 15:03:00 +02:00
Kevin Millikin
089ed2965b
Implement try/finally by inlining the finally code.
...
Try/finally is implemented by inlining. There is a try/catch to catch
exceptions in the try block. The catch body contains the finally code
followed by a rethrow. The code for finally is translated again after the
normal exit of the try block. Break, continue, and return exits in the try
block have the finally code inlined just before the exit is taken.
Try/catch/finally is not yet supported, it requires some changes to the
assigned variables analysis.
R=asgerf@google.com
Review URL: https://codereview.chromium.org//1201983002 .
2015-06-24 10:12:42 +02:00
Srdjan Mitrovic
28594e455d
Disable guessing 'other' cid; this prevents an issue in range analysis. It is not clear if guessing the 'other' cid optimization is the right thing to do as it may bring the flow graph in an unexpected state
...
BUG=
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//1203773002 .
2015-06-23 13:23:02 -07:00
Srdjan Mitrovic
e91b99b66d
Fix crash in modPow (issue 23693); various bigint knowledge missing.
...
BUG=
R=regis@google.com
Review URL: https://codereview.chromium.org//1197263002 .
2015-06-22 15:11:36 -07:00
Ivan Posva
d0d5185550
- Status file tuning.
...
BUG=
Review URL: https://codereview.chromium.org//1199593004 .
2015-06-22 12:47:18 -07:00
Ivan Posva
d9da805f07
- Split big integer tests into pieces.
...
BUG=
R=srdjan@google.com
Review URL: https://codereview.chromium.org//1198993003 .
2015-06-22 12:22:14 -07:00
Srdjan Mitrovic
aa8ea6da27
Enable TryCreateICData optimization, disable crashing test in status file
...
BUG=
R=iposva@google.com
Review URL: https://codereview.chromium.org//1198333004 .
2015-06-22 10:58:51 -07:00
Kevin Millikin
bf595224d5
Implement simple switch statements as nested if/else.
...
Simple switch statements that do not have continue to labeled cases
are compiled into a chain if/else comparisons.
R=asgerf@google.com
Review URL: https://codereview.chromium.org//1191193005 .
2015-06-22 11:29:31 +02:00
Regis Crelier
a192ef4acb
Implement gcd in sdk.
...
R=srdjan@google.com
Review URL: https://codereview.chromium.org//1199513003 .
2015-06-19 13:40:01 -07:00
Karl Klose
3f46181244
cps-ir: Support foreign code.
...
R=kmillikin@google.com
Committed: https://github.com/dart-lang/sdk/commit/a120ee7c9071b60edccff066dcdade078f601377
Reverted: https://github.com/dart-lang/sdk/commit/40ed0daaaf71904d2da271e66ba8381ef857116d
Review URL: https://codereview.chromium.org//1185633003 .
2015-06-19 13:44:58 +02:00
Karl Klose
40ed0daaaf
Revert "cps-ir: Support foreign code."
...
This reverts commit a120ee7c90 .
TBR=kmillikin@google.com
Review URL: https://codereview.chromium.org//1196443002 .
2015-06-18 13:37:52 +02:00
Karl Klose
a120ee7c90
cps-ir: Support foreign code.
...
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//1185633003 .
2015-06-18 13:09:50 +02:00
Asger Feldthaus
fb38d61dba
dart2js cps: Support function types in 'is' and 'as' operators.
...
The generated code uses different helpers than the SSA. In SSA, there are calls to buildFunctionType and _isTest. The CPS uses checkSubtypeOfRuntimeType, the "one size fits all" method we also use to test against type variable types.
When the function type has no type variables in it we could hoist the function type into a constant, but the constant system does not support type representation constants at the moment. But it seems like an optimization we may want to add later.
BUG=
R=karlklose@google.com
Review URL: https://codereview.chromium.org//1180973003 .
2015-06-18 11:30:57 +02:00
Regis Crelier
16bb52b88d
Implement modInverse for an even modulus.
...
Update test.
Fixes #23502
R=srdjan@google.com
Review URL: https://codereview.chromium.org//1188843004 .
2015-06-17 13:50:30 -07:00
Karl Klose
a842f6dff2
Update dart2js-cps_ir test expectations.
...
TBR=johnniwinther@google.com
Review URL: https://codereview.chromium.org//1188183006 .
2015-06-17 09:41:50 +02:00
Karl Klose
bb45376735
Update dart2js-cps_ir status files.
...
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//1191433002 .
2015-06-15 12:50:58 +02:00
Regis Crelier
9edc6e5a6d
Detect zero receiver of modInverse (may not converge and time out
...
in that case).
See #23502
Review URL: https://codereview.chromium.org//1177063002 .
2015-06-10 16:40:24 -07:00
Regis Crelier
f6f338ce67
Implement modInverse (bigint version does not support even modulus yet).
...
Added tests.
See #23502
R=srdjan@google.com
Review URL: https://codereview.chromium.org//1174513004 .
2015-06-10 15:01:46 -07:00
Karl Klose
6cffe227fe
Update dart2js-cps_ir test expectations after bac7481d3d.
...
R=johnniwinther@google.com
Review URL: https://codereview.chromium.org//1171773004 .
2015-06-09 15:12:18 +02:00
Asger Feldthaus
d01d394af7
dart2js cps: Type casts and related changes to type propagation.
...
We now optimize type casts that always fail or always pass.
Type propagation has been refactored a bit to make this work.
A new IR node Unreachable has been added. This is an node that is known
to be unreachable and is ultimately compiled to an empty statement.
BUG=
R=karlklose@google.com
Review URL: https://codereview.chromium.org//1153603006
2015-06-08 17:02:47 +02:00
Srdjan Mitrovic
c0824e7725
Fix 23563: double unary- operator unstable for NANs
...
BUG=
R=koda@google.com
Review URL: https://codereview.chromium.org//1160453003
2015-06-03 11:00:28 -07:00
Johnni Winther
411246ccc7
Handle .fromEnvironment and incompatible constructor invocations
...
BUG=
R=karlklose@google.com
Review URL: https://codereview.chromium.org//1161823004
2015-06-02 10:44:19 +02:00
Asger Feldthaus
bd4e1d726f
dart2js cps: Track underlying value of interceptors in type propagation.
...
BUG=
R=karlklose@google.com
Review URL: https://codereview.chromium.org//1154173002
2015-06-01 11:19:36 +02:00
Lasse R.H. Nielsen
babcd4e9c0
Revert "Make EfficientLength public, as EfficientLengthIterable."
...
It's still not a good solution for detecting an Iterable with an efficient
length. It's not inherited by, e.g., a DelegatingIterable wrapper or similar
generic Iterable transformers.
Keep this as an internal optimization for quickly detecting the most common
efficient-length Iterable classes (List, Set, Queue, Map.keys/values), but
don't make it public.
A *real* solution would be adding a hasEfficientLength getter to Iterable, or
adding an efficientLength getter that may return null if it's not efficient.
This would something that a wrapper can attach to.
R=sgjesse@google.com
Review URL: https://codereview.chromium.org//1154263003
2015-05-29 12:52:45 +02:00
Karl Klose
993338408e
cps_ir: Handle malformed type arguments and type checks.
...
R=asgerf@google.com
Review URL: https://codereview.chromium.org//1156373008
2015-05-29 09:53:35 +02:00
Asger Feldthaus
f1bbc3bb2d
dart2js cps: 'is' checks on types with type arguments.
...
R=karlklose@google.com
Committed: https://github.com/dart-lang/sdk/commit/00c33fb1347fc5c44a324f9503c7c57969e88ca3
Reverted: https://github.com/dart-lang/sdk/commit/f0c4e31174996e6259fab283af14c49aa8faf28c
Review URL: https://codereview.chromium.org//1161683002
2015-05-27 14:14:07 +02:00
Asger Feldthaus
f0c4e31174
Revert "dart2js cps: 'is' checks on types with type arguments."
...
This reverts commit 00c33fb134 .
TBR=karlklose@google.com
BUG=
Review URL: https://codereview.chromium.org//1161793002
2015-05-27 13:54:07 +02:00
Asger Feldthaus
00c33fb134
dart2js cps: 'is' checks on types with type arguments.
...
R=karlklose@google.com
Review URL: https://codereview.chromium.org//1161683002
2015-05-27 13:45:39 +02:00
Asger Feldthaus
f42a0ef25c
dart2js cps: Always use interceptors and type tags for 'is' checks.
...
"x is Foo" will become getInterceptor(x).$isFoo
Testing against a type with type arguments is still a giveup().
This test always works, but is not very fast. For instance, testing
against an int should be "typeof x === 'number' && Math.floor(x) === x".
Following an offline discussion with Karl, the plan is to rewrite
'is'-checks to more fine-grained tests in a CPS optimization pass,
probably the type propagator.
Concretely, we plan to introduce IR nodes like TypeOfTest, FloorTest,
InstanceofTest, etc, which optimization phases can introduce under the
right circumstances. That way, the code generation phase remains simple.
BUG=
R=karlklose@google.com
Review URL: https://codereview.chromium.org//1144163004
2015-05-26 17:50:48 +02:00
Karl Klose
bd612bbec3
cps-ir: Add test suppressions for new tests.
...
TBR=johnniwinther@google.com
Review URL: https://codereview.chromium.org//1156673002
2015-05-22 12:43:19 +02:00
Lasse R.H. Nielsen
dcf0286f53
Add Iterable.empty constructor.
...
Convenience constructor giving an easy/quick way to create an empty iterable.
R=sgjesse@google.com
Review URL: https://codereview.chromium.org//1152483002
2015-05-22 10:39:58 +02:00
Karl Klose
36d3e0d0e6
Update cps-ir test expectations.
...
R=johnniwinther@google.com
Review URL: https://codereview.chromium.org//1152133003
2015-05-22 09:58:58 +02:00
Asger Feldthaus
ccee558a5b
dart2js cps: Access to lazily initialized fields.
...
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//1136843006
2015-05-19 10:05:09 +02:00
sra@google.com
28cfbd8f44
Make more use of ArgumentError.value in js_lib.
...
This helps surface error values in the messages which helps make captured errors understandable.
R=floitsch@google.com
Review URL: https://codereview.chromium.org//1137233004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45782 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-13 22:16:50 +00:00
karlklose@google.com
9b32c9e673
Implement raw list checks.
...
R=asgerf@google.com
Review URL: https://codereview.chromium.org//1123343008
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45762 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-13 11:58:45 +00:00
asgerf@google.com
f5f1eb643d
dart2js cps: Introduce GetStatic/SetStatic.
...
The GetStatic is used for reading static fields and tearing off
static methods.
Invoking a static getter/setter (not from a field) is still an
InvokeStatic, which IMO is the way it should remain.
BUG=
R=karlklose@google.com
Committed: https://code.google.com/p/dart/source/detail?r=45735
Reverted: https://code.google.com/p/dart/source/detail?r=45737
Review URL: https://codereview.chromium.org//1134063002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45738 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-12 14:19:40 +00:00
asgerf@google.com
961c805398
Revert "dart2js cps: Introduce GetStatic/SetStatic."
...
This reverts commit 28e4518df87c72cb8e23fe6d73b7750ad0f2183a.
TBR=karlklose@google.com
BUG=
Review URL: https://codereview.chromium.org//1136523008
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45737 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-12 13:53:15 +00:00
asgerf@google.com
2c90643171
dart2js cps: Introduce GetStatic/SetStatic.
...
The GetStatic is used for reading static fields and tearing off
static methods.
Invoking a static getter/setter (not from a field) is still an
InvokeStatic, which IMO is the way it should remain.
BUG=
R=karlklose@google.com
Review URL: https://codereview.chromium.org//1134063002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45735 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-12 13:35:49 +00:00
karlklose@google.com
a31ba4242c
Adjust test expectations for dart2js_cps-ir.
...
TBR=johnniwinther@google.com
Review URL: https://codereview.chromium.org//1138033003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45705 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-11 18:33:14 +00:00
floitsch@google.com
f4a1b28077
Move isolate tests to lib/isolate.
...
Moves most tests that require dart:isolate to the isolate-directory in the tests section.
Also enables the string_from_environment_default_value_test which didn't have "_test" in its name.
R=lrn@google.com
Review URL: https://codereview.chromium.org//1133983002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45701 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-11 17:59:51 +00:00
karlklose@google.com
0eaa4d4717
cps-ir: Support compilation of methods that use interceptor calling convention.
...
This is a modified version of sra@'s CL https://codereview.chromium.org/1020243002/ with kmillikin@'s comments addressed.
R=sigurdm@google.com , kmillikin@google.com
Review URL: https://codereview.chromium.org//1109403002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45680 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-11 12:38:14 +00:00