From caad86e8805aea21901fd83c41bbc8b7c16338b6 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Sat, 21 May 2011 13:30:58 +0400 Subject: [PATCH] JET-40 Check that 'else' entry is the last one in the list of 'when' entries --- .../jet/lang/cfg/JetControlFlowProcessor.java | 9 ++++++++- idea/testData/checker/When.jet | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/idea/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java b/idea/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java index 9c2cd502407..df81a1b0e8f 100644 --- a/idea/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/idea/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -622,11 +622,18 @@ public class JetControlFlowProcessor { Label doneLabel = builder.createUnboundLabel(); Label nextLabel = builder.createUnboundLabel(); - for (JetWhenEntry whenEntry : expression.getEntries()) { + for (Iterator iterator = expression.getEntries().iterator(); iterator.hasNext(); ) { + JetWhenEntry whenEntry = iterator.next(); if (whenEntry.getSubWhen() != null) throw new UnsupportedOperationException(); // TODO if (whenEntry.isElseContinue()) throw new UnsupportedOperationException(); // TODO + if (whenEntry.isElse()) { + if (iterator.hasNext()) { + trace.getErrorHandler().genericError(whenEntry.getNode(), "'else' entry must be the last one in a when-expression"); + } + } + JetWhenCondition condition = whenEntry.getCondition(); if (condition != null) { condition.accept(new JetVisitor() { diff --git a/idea/testData/checker/When.jet b/idea/testData/checker/When.jet index 11e780d1034..7e71b08b5b3 100644 --- a/idea/testData/checker/When.jet +++ b/idea/testData/checker/When.jet @@ -14,6 +14,7 @@ fun foo() { .a => 1 .equals(1).a => 1 ?.equals(1) => 1 + else => 1 } when (x?:null) { .equals(1) => 1 @@ -46,6 +47,15 @@ fun test() { is boo @ (1, "a", *) => 1 is boo @ (1, *) => 1 } + + when (z) { + else => 1 + (1, 1) => 2 + } + + when (z) { + else => 1 + } } val (Int, Int).boo : (Int, Int, Int) = (1, 1, 1)