Commit Graph

35 Commits

Author SHA1 Message Date
Leaf Petersen 7321b609d5 Inference casts to dynamic, fuzzy types handled
During inference, allow sub-expressions of type dynamic to be cast to the inferred type.

This CL also adds special case support for the case where we are trying to infer a type for a closure literal with a fuzzy type - often these closures are already well-typed (or easily inferable) if we eliminate the fuzziness.

This gets rid of two of the static errors on angular hello world, along with most of the InferableClosure warnings (turning them into InferredTypeClosure infos).

Most of the remaining InferableClosure cases are function literals with block function bodies, which I don't handle in general yet.

BUG=
R=vsm@google.com

Review URL: https://codereview.chromium.org/1059763003
2015-04-03 15:36:27 -07:00
Jacob Richman 5a5ddca7bc Extension method support to move us closer to a valid List implementation.
BUG=
R=jmesserly@google.com

Review URL: https://codereview.chromium.org/1059583002
2015-04-03 14:52:04 -07:00
Vijay Menon 78cb0608b3 Disable closure wrapping by default
R=leafp@google.com

Review URL: https://codereview.chromium.org/1052383003
2015-04-03 14:26:11 -07:00
Leaf Petersen 0399992b81 Downwards closure inference. This implements a basic form of downwards closure inference. It only handles expression functions (=> e), and it does not try to narrow the type of parameters.
BUG=
R=vsm@google.com

Review URL: https://codereview.chromium.org/1050703002
2015-04-03 09:17:30 -07:00
Leaf Petersen da58b9d8aa Downward inference
This is a first cut at downwards inference. The interaction with InferableLiteral etc isn't well sorted out yet, so while downwards inference on nested expressions works, there will currently be spurious warnings.

BUG=
R=vsm@google.com

Review URL: https://codereview.chromium.org/1038213003
2015-03-31 13:24:25 -07:00
Vijay Menon 75ee9c6cc5 Handle for-in loops
R=sigmund@google.com

Review URL: https://codereview.chromium.org/1048863003
2015-03-30 17:22:46 -07:00
Vijay Menon 67e4bc583a Rationalize coercions
This breaks out casts / coercions into:

Standard (on by default)
- DynamicCasts: dynamic -> T
- AssignmentCasts: T x = expr; // T must be a ground type

Inference (this will go away)
- InferableLiteral
- InferableClosure
- InferableAllocation

Implicit (no flag yet, but i'll add to disable by default)
- DownCastComposite: Any cast to a non-ground type
- DownCastImplicit: Any other implicit downcast not covered above

A flag is also added to enable/disable all wrapping.  This is not off by default yet, but that is the intent.

R=leafp@google.com

Review URL: https://codereview.chromium.org/1038583004
2015-03-25 14:51:54 -07:00
Sigmund Cherem 2bf7e0aed8 Transitive inference using SCC
BUG=
R=vsm@google.com

Review URL: https://codereview.chromium.org/1028793002
2015-03-23 13:11:33 -07:00
Vijay Menon 1430655b9e Treat Object and dynamic similarly
Note, this makes: T<dynamic> <: T<Object> and T<Object> <: T<dynamic>.

R=leafp@google.com

Review URL: https://codereview.chromium.org/1024073003
2015-03-20 14:06:13 -07:00
Vijay Menon c831595c88 Allow arity checks on dynamic function types
BUG=
R=jacobr@google.com, leafp@google.com

Review URL: https://codereview.chromium.org/1021273004
2015-03-20 10:40:43 -07:00
Vijay Menon 48d4a4e320 Allow S->T <: dynamic->T
In followup CLs, I will:
- Fix coercions to limit implicit ones.

R=jmesserly@google.com, leafp@google.com

Review URL: https://codereview.chromium.org/1010893004
2015-03-18 16:40:43 -07:00
Sigmund Cherem 2ba454d945 Enable inference in the core libs
R=jmesserly@google.com

Review URL: https://codereview.chromium.org/1023543002
2015-03-18 16:24:23 -07:00
Vijay Menon e50906c0d3 Fix for conditional expressions
R=sigmund@google.com

Review URL: https://codereview.chromium.org/997143003
2015-03-16 10:09:25 -07:00
Vijay Menon 74476b5e4c Log the runtime type of messages
This makes is a little easier to investigate errors.

R=sigmund@google.com

Review URL: https://codereview.chromium.org/993513005
2015-03-09 11:46:27 -07:00
John Messerly 6e824067a3 rename ddc -> dev_compiler, fixes #84
R=sigmund@google.com

Review URL: https://codereview.chromium.org/967933005
2015-03-04 11:12:19 -08:00
Vijay Menon 946676554b Make int and double nullable by default
See patch set 1 for the initial step back and patch set 2 to try to get some of this back.

R=jmesserly@google.com

Review URL: https://codereview.chromium.org/977613002
2015-03-03 12:08:30 -08:00
Vijay Menon 50753e3a47 Typecheck constructor initializers properly
R=leafp@google.com

Review URL: https://codereview.chromium.org/959003003
2015-02-26 16:19:27 -08:00
Sigmund Cherem 9369b3e981 Fix new line breaks on }
R=leafp@google.com

Review URL: https://codereview.chromium.org/959073002
2015-02-26 14:32:48 -08:00
Sigmund Cherem 2ffd89471a Disable formatting and add new-lines to make tests faster.
R=vsm@google.com

Review URL: https://codereview.chromium.org/963593002
2015-02-26 13:13:56 -08:00
John Messerly 425c3d8359 don't run dart gen on JS patch code
R=vsm@google.com

Review URL: https://codereview.chromium.org/961493003
2015-02-26 08:07:22 -08:00
John Messerly 89651ccdef cleanup patch generation to preseve comments and remove @patch
the only human authored changes here are tool/patch_sdk.dart

R=vsm@google.com

Review URL: https://codereview.chromium.org/959913003
2015-02-25 13:23:23 -08:00
Sigmund Cherem e57c960817 rename package:ddc to package:dev_compiler
BUG=
R=vsm@google.com

Review URL: https://codereview.chromium.org/954773003
2015-02-24 17:01:15 -08:00
Vijay Menon 5c1c9c2381 Add LICENSE and corresponding headers
Fix expectations where line number has changed.

R=dgrove@google.com

Review URL: https://chromereviews.googleplex.com/158257013
2015-02-24 15:02:26 -08:00
Sigmund Cherem d2834b49a6 Reenable type promotion
R=jmesserly@google.com, vsm@google.com

Review URL: https://chromereviews.googleplex.com/159667013
2015-02-20 13:56:46 -08:00
John Messerly 6c7cd9b731 Begin to handle some of the *_patch.dart files
Moves: test/sdk --> tool/input_sdk_src
Also moves: test/sdk/lib/_internal/js_lib --> tool/input_sdk_patch
we'll eventually need to customize that code

Adds tool/patch_sdk.dart, an offline transformation step that produces: test/generated_sdk

Essentially this merges the "external" declarations and the @patch syntactically. There's a comment in tool/patch_sdk.dart explaining the rationale behind this approach.

There's still *lots* to do in the generated code. This does none of that. The only new code is tool/patch_sdk.dart and the minimum changes to test/codegen_test.dart and js_codegen.dart to get test.sh running and debuggable.

Tracking bug for SDK is https://github.com/dart-lang/dart-dev-compiler/issues/58

R=sigmund@google.com, vsm@google.com

Review URL: https://chromereviews.googleplex.com/157137013
2015-02-20 08:58:01 -08:00
Sigmund Cherem b23578984b Unify naming of output libraries in both backends
R=jmesserly@google.com, leafp@google.com

Review URL: https://chromereviews.googleplex.com/157197015
2015-02-18 10:12:54 -08:00
John Messerly 694c93c61f fix #41, named arguments with conversions
R=leafp@google.com

Review URL: https://chromereviews.googleplex.com/150407013
2015-02-17 13:27:37 -08:00
Vijay Menon 394bb7fbe7 Fix typename for bottom
R=sigmund@google.com

Review URL: https://chromereviews.googleplex.com/151297013
2015-02-13 09:35:24 -08:00
Vijay Menon 266b6df92d Error on uninitialized non-nullables
R=jmesserly@google.com, leafp@google.com

Review URL: https://chromereviews.googleplex.com/157727013
2015-02-12 09:44:41 -08:00
Vijay Menon 9265d63a32 Fix core libs for primitives
R=jacobr@google.com, jmesserly@google.com

Review URL: https://chromereviews.googleplex.com/155017013
2015-02-11 14:10:27 -08:00
Vijay Menon e64630186d Add non-nullability logic for primitives
Still need to:
- Fix our dart:core errors
- Change DownCastLiteral to error
- Handle "int x;", etc.

R=jmesserly@google.com, leafp@google.com

Review URL: https://chromereviews.googleplex.com/156787013
2015-02-11 12:08:34 -08:00
Leaf Petersen aca4469d51 Workaround type name bug
There's a bug in the analyzer (fixed in ToT) that results in screwy names for function types sometimes.  This works around it for now.

BUG=
R=vsm@google.com

Review URL: https://chromereviews.googleplex.com/156727013
2015-02-10 17:37:13 -08:00
John Messerly bf682828f8 implement try and switch
R=leafp@google.com

Review URL: https://chromereviews.googleplex.com/144527014
2015-02-06 10:25:13 -08:00
John Messerly 27ba5723d9 some test script fixes to get it running cleanly on dart_codegen
R=vsm@google.com

Review URL: https://chromereviews.googleplex.com/150927013
2015-02-04 09:31:50 -08:00
Leaf Petersen 3b3f101787 This CL rolls up a number of changes to the dart code generation.
Import/export directives are preserved, and new ones are generated using package syntax using Vijay's logic.  This is not yet robust for relative URIs, but is sufficient for our purposes.

Wrapper hoisting is disabled, and various wrapper generation bugs are fixed.

Type name qualification is done more selectively, and more correctly.

Casting is disabled in const contexts, with a severe warning.

Coercions and wrappers now both call into the dart logging runtime, and pass various useful information (currently mostly ignored).

This also adds some preliminary dart codegen tests, and hence includes a number of expected output files in the test/dart_codegen/expect directory.

BUG=
R=jmesserly@google.com, vsm@google.com

Review URL: https://chromereviews.googleplex.com/141427014
2015-02-03 16:42:13 -08:00