public TypeReference type_reference()
{
TypeReference reference = null;
IToken token = null;
int num = 1;
try
{
switch (this.LA(1))
{
case 0x3b:
reference = this.simple_type_reference();
break;
case 0x13:
reference = this.anonymous_function_type();
break;
default:
throw new NoViableAltException(this.LT(1), this.getFilename());
}
if ((this.LA(1) == 0x44) && ((this.LA(2) == 0x43) || (this.LA(2) == 0x45)))
{
token = this.LT(1);
this.match(0x44);
while (this.LA(1) == 0x43)
{
this.match(0x43);
if (base.inputState.guessing == 0)
{
num++;
}
}
this.match(0x45);
if (base.inputState.guessing == 0)
{
reference = new ArrayTypeReference(reference.get_LexicalInfo(), reference, new IntegerLiteralExpression(ToLexicalInfo(token), (long) num));
}
return reference;
}
if (!tokenSet_35_.member(this.LA(1)) || !tokenSet_25_.member(this.LA(2)))
{
throw new NoViableAltException(this.LT(1), this.getFilename());
}
return reference;
}
catch (RecognitionException exception)
{
if (base.inputState.guessing != 0)
{
throw;
}
this.reportError(exception);
this.recover(exception, tokenSet_35_);
return reference;
}
return reference;
}