Returns forbidden outside functions

This commit is contained in:
Andrey Breslav
2011-06-17 18:20:24 +04:00
parent 94f00509e2
commit 03460e2bcc
3 changed files with 10 additions and 4 deletions
@@ -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) {
@@ -9,6 +9,10 @@ fun test1() : Any = {<error>return</error>}
fun test2() : Any = @a {return@a 1}
fun test3() : Any { <error>return</error> }
fun bbb() {
return <error>1</error>
}
fun foo(expr: StringBuilder): Int {
val c = 'a'
when(c) {
@@ -105,3 +109,5 @@ fun blockReturnValueTypeMatch() : Int {
return 1
else return <error>1.0</error>
}
val a = <error>return 1</error>
@@ -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?");