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

Issue 9718034: Continue for simple loops (while/for). (Closed)

Created:
8 years, 9 months ago by Lasse Reichstein Nielsen
Modified:
8 years, 9 months ago
Reviewers:
ngeoffray
CC:
reviews_dartlang.org
Visibility:
Public.

Description

Continue for simple loops (while/for). Not yet implemented for do-while and for-in, or even begun for switch cases. Committed: https://code.google.com/p/dart/source/detail?r=5643

Patch Set 1 #

Total comments: 32

Patch Set 2 : Addressed review comments. #

Unified diffs Side-by-side diffs Delta from patch set Stats (+233 lines, -120 lines) Patch
M frog/leg/resolver.dart View 1 4 chunks +6 lines, -6 lines 0 comments Download
M frog/leg/ssa/builder.dart View 1 22 chunks +149 lines, -76 lines 0 comments Download
M frog/leg/ssa/codegen.dart View 1 6 chunks +48 lines, -21 lines 0 comments Download
M frog/leg/ssa/nodes.dart View 4 chunks +22 lines, -12 lines 0 comments Download
M frog/leg/ssa/tracer.dart View 1 chunk +8 lines, -0 lines 0 comments Download
M tests/language/language-leg.status View 2 chunks +0 lines, -5 lines 0 comments Download

Messages

Total messages: 3 (0 generated)
Lasse Reichstein Nielsen
8 years, 9 months ago (2012-03-19 09:56:10 UTC) #1
ngeoffray
LGTM https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/resolver.dart File frog/leg/resolver.dart (right): https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/resolver.dart#newcode1105 frog/leg/resolver.dart:1105: // might have updated its mapping to the ...
8 years, 9 months ago (2012-03-19 11:42:06 UTC) #2
Lasse Reichstein Nielsen
8 years, 9 months ago (2012-03-19 12:13:58 UTC) #3
https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/resolver.dart
File frog/leg/resolver.dart (right):

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/resolver.dart#...
frog/leg/resolver.dart:1105: // might have updated its mapping to the target it
actaully does target.
On 2012/03/19 11:42:06, ngeoffray wrote:
> actaully -> actually

Done.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.dart
File frog/leg/ssa/builder.dart (right):

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.da...
frog/leg/ssa/builder.dart:609: // Represents a single break instruction.
On 2012/03/19 11:42:06, ngeoffray wrote:
> break/continue

Done.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.da...
frog/leg/ssa/builder.dart:629: // Inert break handler used to avoid null checks
when a loop isn't
On 2012/03/19 11:42:06, ngeoffray wrote:
> Inert -> Insert

Done.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.da...
frog/leg/ssa/builder.dart:631: // handler associated with it.
On 2012/03/19 11:42:06, ngeoffray wrote:
> Please update description now that you support switch.

Done.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.da...
frog/leg/ssa/builder.dart:643: // Breaks are always forward jumps.
On 2012/03/19 11:42:06, ngeoffray wrote:
> Ditto

Done.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.da...
frog/leg/ssa/builder.dart:738: // The break handler to use for an upcoming loop
statement (temporarily set
True, this one can go away too (just as the next one).

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.da...
frog/leg/ssa/builder.dart:1170: List<LocalsHandler> continueLocals =
<LocalsHandler>[];
Because endLoop is also used by DoWhile, which isn't handled yet. It'll probably
be moved to endLoop when this is all done.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.da...
frog/leg/ssa/builder.dart:2182: handler.generateBreak();
I generally find the conditional operator harder to read than proper if/else.
I'll keep this.
Also, it would probably be a type warning to inline it without "casting"
elements[node.target] to LabelElement.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.da...
frog/leg/ssa/builder.dart:2191: assert(!isAborted());
On 2012/03/19 11:42:06, ngeoffray wrote:
> I'd get rid of that assert, since the method that visits a block does not have
> an abort block when visiting an individual instruction.

Done.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/builder.da...
frog/leg/ssa/builder.dart:2204: JumpHandler getLoopJumpHandler(Loop node) {
Renamed to createJumpHandler, and always creates something.
Still used in two places, so I'd like to share the code.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/codegen.dart
File frog/leg/ssa/codegen.dart (right):

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/codegen.da...
frog/leg/ssa/codegen.dart:256: }
It's never empty, so no.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/codegen.da...
frog/leg/ssa/codegen.dart:473: if (target.isSwitch) {
On 2012/03/19 11:42:06, ngeoffray wrote:
> Please add a comment that since we're generating switch as a loop, we must
break
> from that loop.

Done.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/codegen.da...
frog/leg/ssa/codegen.dart:488: // Otherwise we would have bailed out in the
builder.
These comments should all go away, just as they did for break in the "switch"
CL.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/codegen.da...
frog/leg/ssa/codegen.dart:490: buffer.add("break ");
On 2012/03/19 11:42:06, ngeoffray wrote:
> Please add a comment on why this isn't 'continue'.

Done.

https://chromiumcodereview.appspot.com/9718034/diff/1/frog/leg/ssa/codegen.da...
frog/leg/ssa/codegen.dart:1217: addBreakLabel(label);
Continue labels are put as labels on a block surrounding the body, so that we
can break the body to reach the update block.

Powered by Google App Engine
This is Rietveld 408576698