Local functions allowed by the typechecker. Unresolved labels tolerated by the CF builder

This commit is contained in:
Andrey Breslav
2011-04-01 17:58:49 +04:00
parent 783654707a
commit 48fdfc54a0
2 changed files with 16 additions and 7 deletions
@@ -310,14 +310,23 @@ public class JetControlFlowProcessor {
value(returnedExpression, false);
}
JetSimpleNameExpression labelElement = expression.getTargetLabel();
JetElement subroutine = (labelElement != null)
? resolveLabel(expression.getLabelName(), expression.getTargetLabel())
: builder.getCurrentSubroutine();
if (returnedExpression == null) {
builder.returnNoValue(subroutine);
JetElement subroutine;
if (labelElement != null) {
String labelName = expression.getLabelName();
assert labelName != null;
subroutine = resolveLabel(labelName, labelElement);
}
else {
builder.returnValue(subroutine);
subroutine = builder.getCurrentSubroutine();
// TODO : a context check
}
if (subroutine != null) {
if (returnedExpression == null) {
builder.returnNoValue(subroutine);
}
else {
builder.returnValue(subroutine);
}
}
}
@@ -1274,7 +1274,7 @@ public class JetTypeInferrer {
@Override
public void visitFunction(JetFunction function) {
super.visitFunction(function); // TODO
scope.addFunctionDescriptor(classDescriptorResolver.resolveFunctionDescriptor(scope.getContainingDeclaration(), scope, function));
}
@Override