protected void class_definition(
TypeMemberCollection container
)
{
IToken id = null;
IToken begin = null;
TypeDefinition td = null;
TypeReferenceCollection baseTypes = null;
TypeMemberCollection members = null;
GenericParameterDeclarationCollection genericParameters = null;
Expression nameSplice = null;
try { // for error handling
{
switch ( LA(1) )
{
case CLASS:
{
match(CLASS);
if (0==inputState.guessing)
{
td = new ClassDefinition();
}
break;
}
case STRUCT:
{
match(STRUCT);
if (0==inputState.guessing)
{
td = new StructDefinition();
}
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1) )
{
case ID:
{
id = LT(1);
match(ID);
break;
}
case SPLICE_BEGIN:
{
begin = LT(1);
match(SPLICE_BEGIN);
nameSplice=atom();
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if (0==inputState.guessing)
{
IToken token = id ?? begin;
td.LexicalInfo = ToLexicalInfo(token);
td.Name = token.getText();
td.Modifiers = _modifiers;
AddAttributes(td.Attributes);
baseTypes = td.BaseTypes;
members = td.Members;
genericParameters = td.GenericParameters;
if (id != null) {
container.Add(td);
} else {
container.Add(new SpliceTypeMember(td, nameSplice));
}
}
{
switch ( LA(1) )
{
case LBRACK:
{
match(LBRACK);
{
switch ( LA(1) )
{
case OF:
{
match(OF);
break;
}
case ID:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
generic_parameter_declaration_list(genericParameters);
match(RBRACK);
break;
}
case LPAREN:
case COLON:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1) )
{
case LPAREN:
{
base_types(baseTypes);
break;
}
case COLON:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
begin_with_doc(td);
{
switch ( LA(1) )
{
case PASS:
{
{
match(PASS);
eos();
}
break;
}
case EOL:
case ABSTRACT:
case CALLABLE:
case CLASS:
case DEF:
case ENUM:
case EVENT:
case FINAL:
case INTERFACE:
case INTERNAL:
case NEW:
case OVERRIDE:
case PARTIAL:
case PUBLIC:
case PROTECTED:
case PRIVATE:
case SELF:
case STATIC:
case STRUCT:
case THEN:
case TRANSIENT:
case VIRTUAL:
case EOS:
case ID:
case LBRACK:
case SPLICE_BEGIN:
{
{
{
switch ( LA(1) )
{
case EOL:
case EOS:
{
eos();
break;
}
case ABSTRACT:
case CALLABLE:
case CLASS:
case DEF:
case ENUM:
case EVENT:
case FINAL:
case INTERFACE:
case INTERNAL:
case NEW:
case OVERRIDE:
case PARTIAL:
case PUBLIC:
case PROTECTED:
case PRIVATE:
case SELF:
case STATIC:
case STRUCT:
case THEN:
case TRANSIENT:
case VIRTUAL:
case ID:
case LBRACK:
case SPLICE_BEGIN:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{ // ( ... )+
int _cnt76=0;
for (;;)
{
bool synPredMatched75 = false;
if (((LA(1)==SPLICE_BEGIN) && (tokenSet_34_.member(LA(2)))))
{
int _m75 = mark();
synPredMatched75 = true;
inputState.guessing++;
try {
{
splice_expression();
eos();
}
}
catch (RecognitionException)
{
synPredMatched75 = false;
}
rewind(_m75);
inputState.guessing--;
}
if ( synPredMatched75 )
{
splice_type_definition_body(members);
}
else if ((tokenSet_35_.member(LA(1))) && (tokenSet_36_.member(LA(2)))) {
type_definition_member(members);
}
else
{
if (_cnt76 >= 1) { goto _loop76_breakloop; } else { throw new NoViableAltException(LT(1), getFilename());; }
}
_cnt76++;
}
_loop76_breakloop: ;
} // ( ... )+
}
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
end(td);
}
catch (RecognitionException ex)
{
if (0 == inputState.guessing)
{
reportError(ex, "class_definition");
recover(ex,tokenSet_22_);
}
else
{
throw ex;
}
}
}