int yyRepetition1;
Pair<Node> yyRepValue1;
int yyOption1;
Node yyOpValue1;
Node yyValue;
ParseError yyError = ParseError.DUMMY;
// Alternative 1.
yyResult = psep(yyStart);
if (yyResult.hasValue("(")) {
yyOption1 = yyResult.index;
yyOpValue1 = null;
yyBase = yyOption1;
yyResult = pkey(yyBase);
if (yyResult.hasValue("=>")) {
yyResult = pType(yyResult.index);
yyError = yyResult.select(yyError, yyOption1);
if (yyResult.hasValue()) {
Node v$el$1 = yyResult.semanticValue();
yyOption1 = yyResult.index;
yyOpValue1 = v$el$1;
}
} else {
yyError = yyError.select("'=>' expected", yyBase);
}
{ // Start scope for v$g$1.
Node v$g$1 = yyOpValue1;
yyBase = yyOption1;
yyResult = psep(yyBase);
if (yyResult.hasValue(")")) {
yyBase = yyResult.index;
yyResult = pkey(yyBase);
if (yyResult.hasValue("=>")) {
yyRepetition1 = yyResult.index;
yyRepValue1 = Pair.empty();
while (true) {
yyResult = pNotFunType(yyRepetition1);
yyError = yyResult.select(yyError, yyRepetition1);
if (yyResult.hasValue()) {
Node v$el$2 = yyResult.semanticValue();
yyBase = yyResult.index;
yyResult = pkey(yyBase);
if (yyResult.hasValue("=>")) {
yyRepetition1 = yyResult.index;
yyRepValue1 = new Pair<Node>(v$el$2, yyRepValue1);
continue;
} else {
yyError = yyError.select("'=>' expected", yyBase);
}
}
break;
}
{ // Start scope for v$g$2.
Pair<Node> v$g$2 = yyRepValue1.reverse();
yyValue = GNode.create("FunTypeInCaseClause", v$g$1, v$g$2);
yyValue.setLocation(location(yyStart));
return new SemanticValue(yyValue, yyRepetition1, yyError);
} // End scope for v$g$2.
} else {
yyError = yyError.select("'=>' expected", yyBase);
}
} else {
yyError = yyError.select("')' expected", yyBase);
}
} // End scope for v$g$1.
}
// Alternative 2.
yyResult = pInfixType(yyStart);
yyError = yyResult.select(yyError);
if (yyResult.hasValue()) {
Node v$g$3 = yyResult.semanticValue();
yyBase = yyResult.index;
yyResult = pkey(yyBase);
if (yyResult.hasValue("=>")) {
yyRepetition1 = yyResult.index;
yyRepValue1 = Pair.empty();
while (true) {
yyResult = pNotFunType(yyRepetition1);
yyError = yyResult.select(yyError, yyRepetition1);
if (yyResult.hasValue()) {
Node v$el$3 = yyResult.semanticValue();
yyBase = yyResult.index;
yyResult = pkey(yyBase);
if (yyResult.hasValue("=>")) {
yyRepetition1 = yyResult.index;
yyRepValue1 = new Pair<Node>(v$el$3, yyRepValue1);
continue;
} else {
yyError = yyError.select("'=>' expected", yyBase);
}
}
break;
}
{ // Start scope for v$g$4.
Pair<Node> v$g$4 = yyRepValue1.reverse();
yyValue = GNode.create("FunTypeInCaseClause", v$g$3, v$g$4);
yyValue.setLocation(location(yyStart));
return new SemanticValue(yyValue, yyRepetition1, yyError);
} // End scope for v$g$4.
} else {
yyError = yyError.select("'=>' expected", yyBase);
}
}
// Done.
yyError = yyError.select("fun type in case clause expected", yyStart);
return yyError;
}