Result yyResult;
int yyBase;
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("=>")) {
yyResult = pType(yyResult.index);
yyError = yyResult.select(yyError);
if (yyResult.hasValue()) {
Node v$g$2 = yyResult.semanticValue();
yyValue = GNode.create("CallByNameFunType", v$g$1, v$g$2);
yyValue.setLocation(location(yyStart));
return yyResult.createValue(yyValue, yyError);
}
} 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("=>")) {
yyResult = pType(yyResult.index);
yyError = yyResult.select(yyError);
if (yyResult.hasValue()) {
Node v$g$4 = yyResult.semanticValue();
yyValue = GNode.create("NormalFunType", v$g$3, v$g$4);
yyValue.setLocation(location(yyStart));
return yyResult.createValue(yyValue, yyError);
}
} else {
yyError = yyError.select("'=>' expected", yyBase);
}
}
// Done.
yyError = yyError.select("fun type expected", yyStart);
return yyError;
}