in languages/baseLanguage/closures/source_gen/jetbrains/mps/baseLanguage/closures/typesystem/typeof_ClosureLiteral_InferenceRule.java [40:327]
public void applyRule(final SNode closure, final TypeCheckingContext typeCheckingContext, IsApplicableStatus status) {
List<SNode> paramTypes = ListSequence.fromList(new ArrayList<SNode>());
for (SNode param : SLinkOperations.getChildren(closure, LINKS.parameter$b4Y3)) {
if (SNodeOperations.isInstanceOf(SLinkOperations.getTarget(param, LINKS.type$a1UY), CONCEPTS.WildCardType$uV) || SNodeOperations.isInstanceOf(SLinkOperations.getTarget(param, LINKS.type$a1UY), CONCEPTS.UndefinedType$uv)) {
final SNode pt_typevar_1221579075465 = typeCheckingContext.createNewRuntimeTypesVariable();
{
SNode _nodeToCheck_1029348928467 = param;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1221579075466", 0, null);
typeCheckingContext.createEquation((SNode) typeCheckingContext.getRepresentative(pt_typevar_1221579075465), (SNode) typeCheckingContext.typeOf(_nodeToCheck_1029348928467, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1221579075470", true), _info_12389875345);
}
ListSequence.fromList(paramTypes).addElement(typeCheckingContext.getRepresentative(pt_typevar_1221579075465));
} else if ((SLinkOperations.getTarget(param, LINKS.type$a1UY) != null)) {
ListSequence.fromList(paramTypes).addElement(typeCheckingContext.typeOf(param, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1733014656714855622", true));
}
}
List<SNode> allRets = ListSequence.fromList(new ArrayList<SNode>());
List<SNode> allYlds = ListSequence.fromList(new ArrayList<SNode>());
List<SNode> allYldAlls = ListSequence.fromList(new ArrayList<SNode>());
List<SNode> allStmts = ListSequence.fromList(new LinkedList<SNode>());
List<SNode> allThrows = ListSequence.fromList(new ArrayList<SNode>());
List<SNode> allCatches = ListSequence.fromList(new ArrayList<SNode>());
for (SNode c : SNodeOperations.getChildren(SLinkOperations.getTarget(closure, LINKS.body$Ujx2))) {
if (SNodeOperations.isInstanceOf(c, CONCEPTS.ReturnStatement$lt)) {
ListSequence.fromList(allRets).addElement(c);
} else if (SNodeOperations.isInstanceOf(c, CONCEPTS.YieldStatement$yx)) {
ListSequence.fromList(allYlds).addElement(c);
} else if (SNodeOperations.isInstanceOf(c, CONCEPTS.YieldAllStatement$J1)) {
ListSequence.fromList(allYldAlls).addElement(c);
} else if (!(SNodeOperations.isInstanceOf(c, CONCEPTS.IStatementListContainer$xz))) {
ListSequence.fromList(allStmts).addElement(c);
}
}
while (!(ListSequence.fromList(allStmts).isEmpty())) {
SNode stmt = ListSequence.fromList(allStmts).removeElementAt(0);
if (SNodeOperations.isInstanceOf(stmt, CONCEPTS.ReturnStatement$lt)) {
ListSequence.fromList(allRets).addElement(stmt);
} else if (SNodeOperations.isInstanceOf(stmt, CONCEPTS.YieldStatement$yx)) {
ListSequence.fromList(allYlds).addElement(stmt);
} else if (SNodeOperations.isInstanceOf(stmt, CONCEPTS.YieldAllStatement$J1)) {
ListSequence.fromList(allYldAlls).addElement(stmt);
} else
if (SNodeOperations.isInstanceOf(stmt, CONCEPTS.YieldStatement$yx)) {
ListSequence.fromList(allYlds).addElement(stmt);
} else {
if (SNodeOperations.isInstanceOf(stmt, CONCEPTS.ThrowStatement$Zy)) {
final SNode tt_typevar_1221579075612 = typeCheckingContext.createNewRuntimeTypesVariable();
{
SNode _nodeToCheck_1029348928467 = SLinkOperations.getTarget(SNodeOperations.cast(stmt, CONCEPTS.ThrowStatement$Zy), LINKS.throwable$kKKg);
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1221579075613", 0, null);
typeCheckingContext.createEquation((SNode) typeCheckingContext.getRepresentative(tt_typevar_1221579075612), (SNode) typeCheckingContext.typeOf(_nodeToCheck_1029348928467, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1221579075617", true), _info_12389875345);
}
ListSequence.fromList(allThrows).addElement(typeCheckingContext.getRepresentative(tt_typevar_1221579075612));
} else if (SNodeOperations.isInstanceOf(stmt, CONCEPTS.TryFinallyStatement$oi)) {
for (SNode caught : SNodeOperations.ofConcept(ListSequence.fromList(SLinkOperations.getChildren(SNodeOperations.cast(stmt, CONCEPTS.TryFinallyStatement$oi), LINKS.catchClause$l$PD)).translate((it) -> (List<SNode>) AbstractCatchClause__BehaviorDescriptor.getCaughtTypes_id2FJPm3OMxhX.invoke(it)), CONCEPTS.ClassifierType$bL)) {
ListSequence.fromList(allCatches).addElement(caught);
}
} else if (SNodeOperations.isInstanceOf(stmt, CONCEPTS.TryCatchStatement$XR)) {
for (SNode caught : SNodeOperations.ofConcept(ListSequence.fromList(SLinkOperations.getChildren(SNodeOperations.cast(stmt, CONCEPTS.TryCatchStatement$XR), LINKS.catchClause$dMnP)).translate((it) -> (List<SNode>) AbstractCatchClause__BehaviorDescriptor.getCaughtTypes_id2FJPm3OMxhX.invoke(it)), CONCEPTS.ClassifierType$bL)) {
ListSequence.fromList(allCatches).addElement(caught);
}
} else if (SNodeOperations.isInstanceOf(stmt, CONCEPTS.TryUniversalStatement$$M)) {
for (SNode caught : SNodeOperations.ofConcept(ListSequence.fromList(SLinkOperations.getChildren(SNodeOperations.cast(stmt, CONCEPTS.TryUniversalStatement$$M), LINKS.catchClause$Q4F)).translate((it) -> (List<SNode>) AbstractCatchClause__BehaviorDescriptor.getCaughtTypes_id2FJPm3OMxhX.invoke(it)), CONCEPTS.ClassifierType$bL)) {
ListSequence.fromList(allCatches).addElement(caught);
}
} else {
for (SNode thr : ListSequence.fromList(SNodeOperations.getNodeDescendants(stmt, CONCEPTS.IMethodCall$M9, false, new SAbstractConcept[]{CONCEPTS.IStatementListContainer$xz})).translate((it) -> (List<SNode>) IMethodLike__BehaviorDescriptor.getThrowableTypes_id5op8ooRkkc7.invoke(SLinkOperations.getTarget(it, LINKS.baseMethodDeclaration$pyYw)))) {
ListSequence.fromList(allThrows).addElement(SNodeOperations.copyNode(thr));
}
}
List<SNode> allChildren = ListSequence.fromList(new LinkedList<SNode>());
ListSequence.fromList(allChildren).addSequence(ListSequence.fromList(SNodeOperations.getChildren(stmt)));
while (ListSequence.fromList(allChildren).isNotEmpty()) {
SNode c = ListSequence.fromList(allChildren).removeElementAt(0);
if (SNodeOperations.isInstanceOf(c, CONCEPTS.StatementList$m_)) {
for (SNode cstmt : SLinkOperations.getChildren(SNodeOperations.cast(c, CONCEPTS.StatementList$m_), LINKS.statement$53DE)) {
if (!(SNodeOperations.isInstanceOf(cstmt, CONCEPTS.IStatementListContainer$xz))) {
ListSequence.fromList(allStmts).addElement(cstmt);
}
}
} else if (!(SNodeOperations.isInstanceOf(c, CONCEPTS.IStatementListContainer$xz))) {
ListSequence.fromList(allChildren).addSequence(ListSequence.fromList(SNodeOperations.getChildren(c)));
}
}
}
}
List<SNode> realThrows = ListSequence.fromList(new ArrayList<SNode>());
with_allThrows:
for (SNode another : allThrows) {
if (SNodeOperations.isInstanceOf(another, CONCEPTS.ClassifierType$bL)) {
for (SNode one : realThrows) {
if (SNodeOperations.isInstanceOf(one, CONCEPTS.ClassifierType$bL) && (SLinkOperations.getTarget(SNodeOperations.cast(one, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr) == SLinkOperations.getTarget(SNodeOperations.cast(another, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr) || (boolean) Classifier__BehaviorDescriptor.isDescendant_id6dL7A1DpKo1.invoke(SLinkOperations.getTarget(SNodeOperations.cast(another, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr), SLinkOperations.getTarget(SNodeOperations.cast(one, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr)))) {
continue with_allThrows;
}
if (new SNodeMatcher().match(one, another)) {
continue with_allThrows;
}
}
for (SNode caught : allCatches) {
if (SNodeOperations.isInstanceOf(caught, CONCEPTS.ClassifierType$bL) && (SLinkOperations.getTarget(SNodeOperations.cast(caught, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr) == SLinkOperations.getTarget(SNodeOperations.cast(another, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr) || (boolean) Classifier__BehaviorDescriptor.isDescendant_id6dL7A1DpKo1.invoke(SLinkOperations.getTarget(SNodeOperations.cast(another, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr), SLinkOperations.getTarget(SNodeOperations.cast(caught, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr)))) {
continue with_allThrows;
}
if (new SNodeMatcher().match(caught, another)) {
continue with_allThrows;
}
}
}
ListSequence.fromList(realThrows).addElement(another);
}
final SNode RLCS_typevar_1221579075692 = typeCheckingContext.createNewRuntimeTypesVariable();
// ensure the variable gets "pulled up" when solving inequalities
SPropertyOperations.assign(SNodeOperations.as(typeCheckingContext.getRepresentative(RLCS_typevar_1221579075692), CONCEPTS.RuntimeTypeVariable$4a), PROPS.pullUp$lTOJ, true);
boolean isVoid = false;
final List<SNode> returnDeps = new ArrayList<SNode>();
final List<SNode> additionalReturnTypes = new ArrayList<SNode>();
for (SNode rs : allRets) {
if (SNodeOperations.isInstanceOf(SLinkOperations.getTarget(SNodeOperations.cast(rs, CONCEPTS.ReturnStatement$lt), LINKS.expression$eJ92), CONCEPTS.NullLiteral$QQ)) {
ListSequence.fromList(additionalReturnTypes).addElement(_quotation_createNode_nx7618_a0a0a0a91a1());
} else {
SNode retExpression = SLinkOperations.getTarget(SNodeOperations.cast(rs, CONCEPTS.ReturnStatement$lt), LINKS.expression$eJ92);
if (retExpression == null) {
ListSequence.fromList(additionalReturnTypes).addElement(_quotation_createNode_nx7618_a0a0a1a0a0t0b());
isVoid = true;
} else {
ListSequence.fromList(returnDeps).addElement(retExpression);
}
}
}
final SNode YLCS_typevar_1221579075693 = typeCheckingContext.createNewRuntimeTypesVariable();
for (SNode ys : allYlds) {
if (SNodeOperations.isInstanceOf(SLinkOperations.getTarget(SNodeOperations.cast(ys, CONCEPTS.YieldStatement$yx), LINKS.expression$BvDE), CONCEPTS.NullLiteral$QQ)) {
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "7668447476859502122", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) typeCheckingContext.getRepresentative(YLCS_typevar_1221579075693), (SNode) _quotation_createNode_nx7618_a1a0c0a0a0x0b(), false, true, _info_12389875345);
}
} else {
{
SNode _nodeToCheck_1029348928467 = SLinkOperations.getTarget(SNodeOperations.cast(ys, CONCEPTS.YieldStatement$yx), LINKS.expression$BvDE);
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "7668447476859502152", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) typeCheckingContext.getRepresentative(YLCS_typevar_1221579075693), (SNode) typeCheckingContext.typeOf(_nodeToCheck_1029348928467, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "7668447476859502170", true), false, true, _info_12389875345);
}
}
}
final SNode YALCS_typevar_1229000934873 = typeCheckingContext.createNewRuntimeTypesVariable();
for (SNode yas : allYldAlls) {
final SNode elementType_typevar_1229000969704 = typeCheckingContext.createNewRuntimeTypesVariable();
{
SNode _nodeToCheck_1029348928467 = SLinkOperations.getTarget(SNodeOperations.cast(yas, CONCEPTS.YieldAllStatement$J1), LINKS.expression$drs5);
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "7668447476859502247", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) _quotation_createNode_nx7618_a0a0c0b0z0b(typeCheckingContext.getRepresentative(elementType_typevar_1229000969704), typeCheckingContext.getRepresentative(elementType_typevar_1229000969704)), (SNode) typeCheckingContext.typeOf(_nodeToCheck_1029348928467, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1229000996769", true), false, true, _info_12389875345);
}
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1229001090979", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) typeCheckingContext.getRepresentative(YALCS_typevar_1229000934873), (SNode) typeCheckingContext.getRepresentative(elementType_typevar_1229000969704), false, true, _info_12389875345);
}
}
List<SNode> stmts = SLinkOperations.getChildren(SLinkOperations.getTarget(closure, LINKS.body$Ujx2), LINKS.statement$53DE);
SNode lastStmt = (stmts != null && ListSequence.fromList(stmts).isNotEmpty() ? IMethodLike__BehaviorDescriptor.getLastStatement_idi2fhS7A.invoke(closure) : null);
boolean returnsValue = !(ListSequence.fromList(allRets).isEmpty());
boolean returnsFromLast = !(isVoid) && SNodeOperations.isInstanceOf(lastStmt, CONCEPTS.ExpressionStatement$O8) && !((boolean) IStatementListContainer__BehaviorDescriptor.isExecuteSynchronous_idhTIpcC8.invoke(closure));
boolean yieldsValue = !(ListSequence.fromList(allYlds).isEmpty());
switch (ListSequence.fromList(allYldAlls).count()) {
case 0:
break;
case 1:
if (ListSequence.fromList(allYldAlls).getElement(0) == lastStmt && !(yieldsValue)) {
returnsValue = true;
ListSequence.fromList(additionalReturnTypes).addElement(_quotation_createNode_nx7618_a0a1a0a1fb0b(typeCheckingContext.getRepresentative(YALCS_typevar_1229000934873)));
break;
}
// fall through
default:
yieldsValue = true;
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1229010820337", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) typeCheckingContext.getRepresentative(YLCS_typevar_1221579075693), (SNode) typeCheckingContext.getRepresentative(YALCS_typevar_1229000934873), false, true, _info_12389875345);
}
}
final SNode RESULT_typevar_1221579592331 = typeCheckingContext.createNewRuntimeTypesVariable();
final SNode RETURN_typevar_1232125235963 = typeCheckingContext.createNewRuntimeTypesVariable();
final SNode TERMINATE_typevar_1232105622932 = typeCheckingContext.createNewRuntimeTypesVariable();
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1232131392781", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) typeCheckingContext.getRepresentative(RETURN_typevar_1232125235963), (SNode) typeCheckingContext.getRepresentative(RLCS_typevar_1221579075692), false, true, _info_12389875345);
}
if (returnsFromLast && !(yieldsValue)) {
if (SNodeOperations.isInstanceOf(SLinkOperations.getTarget(SNodeOperations.cast(lastStmt, CONCEPTS.ExpressionStatement$O8), LINKS.expression$5L7M), CONCEPTS.NullLiteral$QQ)) {
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "7668447476859502289", 0, null);
typeCheckingContext.createEquation((SNode) typeCheckingContext.getRepresentative(TERMINATE_typevar_1232105622932), (SNode) _quotation_createNode_nx7618_a1a0c0a0a0kb0b(), _info_12389875345);
}
ListSequence.fromList(additionalReturnTypes).addElement(_quotation_createNode_nx7618_a0a1a0a63a1());
} else {
ListSequence.fromList(returnDeps).addElement(SLinkOperations.getTarget(SNodeOperations.cast(lastStmt, CONCEPTS.ExpressionStatement$O8), LINKS.expression$5L7M));
{
SNode _nodeToCheck_1029348928467 = SLinkOperations.getTarget(SNodeOperations.cast(lastStmt, CONCEPTS.ExpressionStatement$O8), LINKS.expression$5L7M);
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "7668447476859502321", 0, null);
typeCheckingContext.createEquation((SNode) typeCheckingContext.getRepresentative(TERMINATE_typevar_1232105622932), (SNode) typeCheckingContext.typeOf(_nodeToCheck_1029348928467, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "7668447476859502377", true), _info_12389875345);
}
}
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "7668447476859502451", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) typeCheckingContext.getRepresentative(RESULT_typevar_1221579592331), (SNode) typeCheckingContext.getRepresentative(RLCS_typevar_1221579075692), false, true, _info_12389875345);
}
} else {
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1232131979682", 0, null);
typeCheckingContext.createEquation((SNode) typeCheckingContext.getRepresentative(TERMINATE_typevar_1232105622932), (SNode) _quotation_createNode_nx7618_a1a0c0a0a63a1(), _info_12389875345);
}
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1221663751995", 0, null);
typeCheckingContext.createEquation((SNode) typeCheckingContext.getRepresentative(RESULT_typevar_1221579592331), (SNode) typeCheckingContext.getRepresentative(RLCS_typevar_1221579075692), _info_12389875345);
}
}
// Ensure all return values have their type set before starting inference
final AtomicInteger remaining = new AtomicInteger(ListSequence.fromList(returnDeps).count());
ListSequence.fromList(returnDeps).visitAll((it) -> {
{
final SNode argtype = typeCheckingContext.typeOf(it, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "5533324111881364239", true);
typeCheckingContext.whenConcrete(argtype, () -> {
if (remaining.decrementAndGet() == 0) {
ListSequence.fromList(returnDeps).visitAll((arg) -> {
{
SNode _nodeToCheck_1029348928467 = arg;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "5533324111881407229", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) typeCheckingContext.getRepresentative(RLCS_typevar_1221579075692), (SNode) typeCheckingContext.typeOf(_nodeToCheck_1029348928467, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "5533324111881412490", true), false, true, _info_12389875345);
}
});
ListSequence.fromList(additionalReturnTypes).visitAll((type) -> {
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "387838872205489327", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) typeCheckingContext.getRepresentative(RLCS_typevar_1221579075692), (SNode) type, false, true, _info_12389875345);
}
});
}
}, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "5533324111881363185", true, false);
}
});
if (ListSequence.fromList(returnDeps).isEmpty()) {
ListSequence.fromList(additionalReturnTypes).visitAll((type) -> {
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "387838872205493321", 0, null);
typeCheckingContext.createGreaterThanInequality((SNode) typeCheckingContext.getRepresentative(RLCS_typevar_1221579075692), (SNode) type, false, true, _info_12389875345);
}
});
}
if (returnsValue && yieldsValue) {
if (!(false)) {
final MessageTarget errorTarget = new NodeMessageTarget();
IErrorReporter _reporter_2309309498 = typeCheckingContext.reportTypeError(closure, "closure must either return or yield value", "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1221579075859", null, errorTarget);
}
} else
if ((returnsValue || returnsFromLast) && !(yieldsValue)) {
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1229718163909", 0, null);
typeCheckingContext.createEquation((SNode) typeCheckingContext.typeOf(_nodeToCheck_1029348928467, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1229718156828", true), (SNode) ClosureLiteral__BehaviorDescriptor.getType_idhTgUC0Q.invoke(closure, paramTypes, typeCheckingContext.getRepresentative(RESULT_typevar_1221579592331), typeCheckingContext.getRepresentative(RETURN_typevar_1232125235963), typeCheckingContext.getRepresentative(TERMINATE_typevar_1232105622932), realThrows), _info_12389875345);
}
} else
if (yieldsValue) {
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1229718256918", 0, null);
typeCheckingContext.createEquation((SNode) typeCheckingContext.typeOf(_nodeToCheck_1029348928467, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1229718251100", true), (SNode) ClosureLiteral__BehaviorDescriptor.getType_idhTgUC0Q.invoke(closure, paramTypes, _quotation_createNode_nx7618_b0a1a0c0a0a0rb0b(typeCheckingContext.getRepresentative(YLCS_typevar_1221579075693)), null, null, realThrows), _info_12389875345);
}
} else {
{
SNode _nodeToCheck_1029348928467 = closure;
EquationInfo _info_12389875345 = new EquationInfo(_nodeToCheck_1029348928467, null, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1229718281813", 0, null);
typeCheckingContext.createEquation((SNode) typeCheckingContext.typeOf(_nodeToCheck_1029348928467, "r:00000000-0000-4000-0000-011c89590337(jetbrains.mps.baseLanguage.closures.typesystem)", "1229718277155", true), (SNode) ClosureLiteral__BehaviorDescriptor.getType_idhTgUC0Q.invoke(closure, paramTypes, _quotation_createNode_nx7618_b0a1a0c0a0a0a34a1(), _quotation_createNode_nx7618_c0a1a0c0a0a0a34a1(), _quotation_createNode_nx7618_d0a1a0c0a0a0a34a1(), realThrows), _info_12389875345);
}
}
}