Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Issue 9391004: Implement cycle-checking and code generation for redirecting constructors. (Closed)

Created:
8 years, 10 months ago by karlklose
Modified:
8 years, 10 months ago
Reviewers:
floitsch, ngeoffray, kasperl
CC:
reviews_dartlang.org, ahe
Visibility:
Public.

Description

Implement cycle-checking and code generation for redirecting constructors. Committed: https://code.google.com/p/dart/source/detail?r=4378

Patch Set 1 #

Patch Set 2 : Minor edits. #

Patch Set 3 : Refactor a function. #

Total comments: 6

Patch Set 4 : Address comments and add a test. #

Total comments: 8

Patch Set 5 : Address Florian's comments. #

Total comments: 13

Patch Set 6 : Address comments. #

Unified diffs Side-by-side diffs Delta from patch set Stats (+162 lines, -62 lines) Patch
M frog/leg/resolver.dart View 1 2 3 4 5 11 chunks +109 lines, -42 lines 0 comments Download
M frog/leg/ssa/builder.dart View 1 2 3 4 5 1 chunk +11 lines, -13 lines 0 comments Download
M frog/leg/tree/nodes.dart View 1 2 3 4 5 1 chunk +8 lines, -0 lines 0 comments Download
M frog/leg/warnings.dart View 1 2 3 4 5 1 chunk +10 lines, -2 lines 0 comments Download
A frog/tests/leg_only/src/CyclicConstructorTest.dart View 1 2 3 4 5 1 chunk +23 lines, -0 lines 0 comments Download
M tests/co19/co19-leg.status View 1 2 3 4 5 2 chunks +1 line, -3 lines 0 comments Download
M tests/language/language-leg.status View 1 2 3 4 5 2 chunks +0 lines, -2 lines 0 comments Download

Messages

Total messages: 9 (0 generated)
karlklose
8 years, 10 months ago (2012-02-14 14:16:09 UTC) #1
kasperl
DBC: https://chromiumcodereview.appspot.com/9391004/diff/4007/frog/leg/resolver.dart File frog/leg/resolver.dart (right): https://chromiumcodereview.appspot.com/9391004/diff/4007/frog/leg/resolver.dart#newcode77 frog/leg/resolver.dart:77: seen.add(element); Do you ever add more than one ...
8 years, 10 months ago (2012-02-14 14:24:47 UTC) #2
karlklose
Thank you for the comments, Kasper. https://chromiumcodereview.appspot.com/9391004/diff/4007/frog/leg/resolver.dart File frog/leg/resolver.dart (right): https://chromiumcodereview.appspot.com/9391004/diff/4007/frog/leg/resolver.dart#newcode77 frog/leg/resolver.dart:77: seen.add(element); Done, redirection ...
8 years, 10 months ago (2012-02-14 15:44:41 UTC) #3
floitsch
LGTM. https://chromiumcodereview.appspot.com/9391004/diff/5008/frog/leg/resolver.dart File frog/leg/resolver.dart (right): https://chromiumcodereview.appspot.com/9391004/diff/5008/frog/leg/resolver.dart#newcode70 frog/leg/resolver.dart:70: if (tree.initializers != null) { maybe verify in ...
8 years, 10 months ago (2012-02-14 16:38:01 UTC) #4
karlklose
Thanks, Florian. https://chromiumcodereview.appspot.com/9391004/diff/5008/frog/leg/resolver.dart File frog/leg/resolver.dart (right): https://chromiumcodereview.appspot.com/9391004/diff/5008/frog/leg/resolver.dart#newcode70 frog/leg/resolver.dart:70: if (tree.initializers != null) { On 2012/02/14 ...
8 years, 10 months ago (2012-02-15 13:10:35 UTC) #5
ngeoffray
LGTM! CC'ing Peter so he gets reminded that we need a different AST node between: ...
8 years, 10 months ago (2012-02-16 11:23:50 UTC) #6
ngeoffray
8 years, 10 months ago (2012-02-16 11:24:02 UTC) #7
ahe
DBC https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/tests/leg_only/src/CyclicConstructorTest.dart File frog/tests/leg_only/src/CyclicConstructorTest.dart (right): https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/tests/leg_only/src/CyclicConstructorTest.dart#newcode16 frog/tests/leg_only/src/CyclicConstructorTest.dart:16: new A.c(); /// 03: compile-time error On 2012/02/16 ...
8 years, 10 months ago (2012-02-16 11:35:40 UTC) #8
karlklose
8 years, 10 months ago (2012-02-17 13:35:00 UTC) #9
https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/leg/resolver.dart
File frog/leg/resolver.dart (right):

https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/leg/resolver.da...
frog/leg/resolver.dart:70: if (element.kind !==
ElementKind.GENERATIVE_CONSTRUCTOR_BODY &&
We do, the builder resolves its elements to put into into the worklist for
codegen.

https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/leg/resolver.da...
frog/leg/resolver.dart:78: // have redirections.
On 2012/02/16 11:23:50, ngeoffray wrote:
> Instead of doing this, I suggest creating a method and doing:
> if (redirection != null) resolveRedirectingConstructor();

Done.

https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/leg/resolver.da...
frog/leg/resolver.dart:89: FunctionExpression functionNode =
redirection.parseNode(compiler);
I changed the code to do simple lookups using the name isntead of reusing
resolvers. I would like to keep that code in the resolver to keep it simple.

https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/leg/tree/nodes....
File frog/leg/tree/nodes.dart (right):

https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/leg/tree/nodes....
frog/leg/tree/nodes.dart:534: bool hasBody() {
On 2012/02/16 11:23:50, ngeoffray wrote:
> Please file a bug, assign it to Peter, and add a TODO to make sure a different
> AST will be created for body-less methods.

Done.

https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/tests/leg_only/...
File frog/tests/leg_only/src/CyclicConstructorTest.dart (right):

https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/tests/leg_only/...
frog/tests/leg_only/src/CyclicConstructorTest.dart:1: // Copyright (c) 2011, the
Dart project authors.  Please see the AUTHORS file
On 2012/02/16 11:23:50, ngeoffray wrote:
> 2011 -> 2012.
Done.

> Also, this should probably be a language test.
Left it in leg_only for now, but we should go through all the leg_only tests to
decide which of them can be promoted to language tests.

https://chromiumcodereview.appspot.com/9391004/diff/8001/frog/tests/leg_only/...
frog/tests/leg_only/src/CyclicConstructorTest.dart:16: new A.c();  /// 03:
compile-time error
On 2012/02/16 11:23:50, ngeoffray wrote:
> As discussed yesterday about the multi-tests, will that work on dartc? class A
> will be analyzed even if the constructors are not invoked.

Done.

Powered by Google App Engine
This is Rietveld 408576698