On Thursday, 9 May 2013 at 11:24:03 UTC, bearophile wrote:
A little Java program I've just found in a blog post:


class Flow {
    static public void main(String[] args) {
        for (int i = 0; i < 6; ++i) {
            System.out.println("Loop: " + i);

            try {
                try {
                    if (i == 3)
                        break;
                } finally {
                    if (i % 2 != 0)
                        throw new Exception("");
                }
            } catch (Exception e) {
                System.out.println("Caught");
            }
        }
    }
}


Its output:

Loop: 0
Loop: 1
Caught
Loop: 2
Loop: 3
Caught
Loop: 4
Loop: 5
Caught


My D translation:

import std.stdio;

void main() {
    foreach (i; 0 .. 6) {
        writeln("Loop: ", i);

        try {
            try {
                if (i == 3)
                    break;
            } finally {
                if (i % 2 != 0)
                    throw new Exception("");
            }
        } catch (Exception e) {
            writeln("Caught");
        }
    }
}


It prints:

Loop: 0
Loop: 1
Caught
Loop: 2
Loop: 3

And then it crashes.

Bye,
bearophile


I just tested this for you when you hopped in IRC but you left before I could tell you that a 64-bit Windows dmd build did not crash and here is the output.

Loop: 0
Loop: 1
Caught
Loop: 2
Loop: 3
Caught
Loop: 4
Loop: 5
Caught

Reply via email to