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); value(returnedExpression, false);
} }
JetSimpleNameExpression labelElement = expression.getTargetLabel(); JetSimpleNameExpression labelElement = expression.getTargetLabel();
JetElement subroutine = (labelElement != null) JetElement subroutine;
? resolveLabel(expression.getLabelName(), expression.getTargetLabel()) if (labelElement != null) {
: builder.getCurrentSubroutine(); String labelName = expression.getLabelName();
if (returnedExpression == null) { assert labelName != null;
builder.returnNoValue(subroutine); subroutine = resolveLabel(labelName, labelElement);
} }
else { 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 @Override
public void visitFunction(JetFunction function) { public void visitFunction(JetFunction function) {
super.visitFunction(function); // TODO scope.addFunctionDescriptor(classDescriptorResolver.resolveFunctionDescriptor(scope.getContainingDeclaration(), scope, function));
} }
@Override @Override