Skip to content

Break wird als break aus dem switch interpretiert

Das folgende pseuCo-Programm

mainAgent {
    while (true) {
        println("Inner Loop");
        select {
            default : {
                println("default case");
                break;
            }
        }
    }
}

verhält sich in pseuCoCo wie folgendes Java-Programm:

while (true) {
	System.out.println("Inner Loop");
	switch (42) {
	default: {
		System.out.println("default case");
		break;
	}
	}
}

Das pseuCo-break wird also direkt in das Java-break übersetzt. Dies ist aber hier falsch, da man in pseuCo nicht aus den cases raus-break-en kann. Es wird also erwartet, dass man aus der Schleife rausbricht.

Eine korrekte Übersetzung ist dann also:

loop:
while (true) {
	System.out.println("Inner Loop");
	switch (42) {
	default: {
		System.out.println("default case");
		break loop;
	}
	}
}

EDIT: Darüber, ob die Semantik sich wirklich so verhalten soll, lässt sich streiten. In Go ist die Semantik von break so, wie es hier bereits implementiert ist, siehe: https://golang.org/ref/spec#Break_statements.

Edited by Maximilian Wuttke