public BlockExpression function_expression()
{
BlockExpression m = null;
IToken token = null;
try
{
Block block;
token = this.LT(1);
this.match(0x13);
if (base.inputState.guessing == 0)
{
m = new BlockExpression(ToLexicalInfo(token));
m.Annotate("inline");
block = m.get_Body();
}
this.match(0x3f);
switch (this.LA(1))
{
case 12:
case 0x10:
case 0x21:
case 0x3b:
case 0x63:
this.parameter_declaration_list(m);
break;
case 0x40:
break;
default:
throw new NoViableAltException(this.LT(1), this.getFilename());
}
this.match(0x40);
switch (this.LA(1))
{
case 0x42:
{
this.match(0x42);
TypeReference reference = this.type_reference();
if (base.inputState.guessing == 0)
{
m.set_ReturnType(reference);
}
break;
}
case 12:
case 15:
case 0x13:
case 0x1b:
case 0x1d:
case 0x27:
case 40:
case 0x2a:
case 0x2c:
case 0x3b:
case 60:
case 0x3d:
case 0x3f:
case 0x44:
case 0x4f:
case 80:
case 0x52:
case 0x58:
case 0x67:
case 0x69:
case 0x6a:
case 0x6b:
case 0x6c:
case 0x6d:
break;
default:
throw new NoViableAltException(this.LT(1), this.getFilename());
}
if ((this.LA(1) == 0x3d) && tokenSet_13_.member(this.LA(2)))
{
this.block(block);
return m;
}
if (!tokenSet_16_.member(this.LA(1)) || !tokenSet_20_.member(this.LA(2)))
{
throw new NoViableAltException(this.LT(1), this.getFilename());
}
Expression expression2 = this.expression();
if (base.inputState.guessing == 0)
{
block.Add(expression2);
}
return m;
}
catch (RecognitionException exception)
{
if (base.inputState.guessing != 0)
{
throw;
}
this.reportError(exception);
this.recover(exception, tokenSet_20_);
return m;
}
return m;
}