Local functions allowed by the typechecker. Unresolved labels tolerated by the CF builder
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user