From 03460e2bcc52d33de186ae1d206e6fab69ef27bb Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 17 Jun 2011 18:20:24 +0400 Subject: [PATCH] Returns forbidden outside functions --- idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java | 2 +- idea/testData/checker/FunctionReturnTypes.jet | 6 ++++++ idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java | 6 +++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 345cc2e4c36..e12584ab8ca 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -123,7 +123,7 @@ public class JetTypeInferrer { @Nullable public JetType getType(@NotNull final JetScope scope, @NotNull JetExpression expression, boolean preferBlock, @Nullable JetType expectedType) { - return new TypeInferrerVisitor(scope, preferBlock, DataFlowInfo.getEmpty(), expectedType, null).getType(expression); + return new TypeInferrerVisitor(scope, preferBlock, DataFlowInfo.getEmpty(), expectedType, FORBIDDEN).getType(expression); } public JetType getTypeWithNamespaces(@NotNull final JetScope scope, @NotNull JetExpression expression, boolean preferBlock) { diff --git a/idea/testData/checker/FunctionReturnTypes.jet b/idea/testData/checker/FunctionReturnTypes.jet index 1857f065665..2aa8c2f68da 100644 --- a/idea/testData/checker/FunctionReturnTypes.jet +++ b/idea/testData/checker/FunctionReturnTypes.jet @@ -9,6 +9,10 @@ fun test1() : Any = {return} fun test2() : Any = @a {return@a 1} fun test3() : Any { return } +fun bbb() { + return 1 +} + fun foo(expr: StringBuilder): Int { val c = 'a' when(c) { @@ -105,3 +109,5 @@ fun blockReturnValueTypeMatch() : Int { return 1 else return 1.0 } + +val a = return 1 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java b/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java index 020c32cb633..3372bca02a4 100644 --- a/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java +++ b/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java @@ -92,8 +92,8 @@ public class JetTypeCheckerTest extends LightDaemonAnalyzerTestCase { public void testJumps() throws Exception { assertType("throw e", JetStandardClasses.getNothingType()); - assertType("return", JetStandardClasses.getNothingType()); - assertType("return 1", JetStandardClasses.getNothingType()); +// assertType("return", JetStandardClasses.getNothingType()); +// assertType("return 1", JetStandardClasses.getNothingType()); assertType("continue", JetStandardClasses.getNothingType()); assertType("continue \"foo\"", JetStandardClasses.getNothingType()); assertType("break", JetStandardClasses.getNothingType()); @@ -105,7 +105,7 @@ public class JetTypeCheckerTest extends LightDaemonAnalyzerTestCase { assertType("if (true) 1 else 1", "Int"); assertType("if (true) 1 else return", "Int"); assertType("if (true) return else 1", "Int"); - assertType("if (true) return else return", "Nothing"); + assertType("if (true) throw Exception() else throw Exception()", "Nothing"); assertType("if (true) 1 else null", "Int?"); assertType("if (true) null else null", "Nothing?");