private DelegateElement ParseDelegate(
CodeAccess access, MemberModifiers memberAttributes)
{
string delegateType = CaptureWord();
bool isFunction = false;
switch (VBKeyword.Normalize(delegateType))
{
case VBKeyword.Sub:
isFunction = false;
break;
case VBKeyword.Function:
isFunction = true;
break;
default:
this.OnParseError(
"Expected Sub or Function for delegate declaration");
break;
}
MethodElement methodElement = ParseMethod(
access, memberAttributes, isFunction, true, false, OperatorType.None, false, false, null);
DelegateElement delegateElement = new DelegateElement();
delegateElement.Name = methodElement.Name;
delegateElement.Access = methodElement.Access;
delegateElement.MemberModifiers = methodElement.MemberModifiers;
delegateElement.Parameters = methodElement.Parameters;
delegateElement.BodyText = methodElement.BodyText;
if (isFunction)
{
delegateElement.Type = methodElement.Type;
}
foreach (TypeParameter typeParameter in methodElement.TypeParameters)
{
delegateElement.AddTypeParameter(typeParameter);
}
return delegateElement;
}