public Tuple<string, SerializedType, SerializedType> ParseQualifiedTypeCode(string basicName, string[] qualification, List<Argument_v1> compoundArgs)
{
this.compoundArgs = new List<Argument_v1>();
this.Scope = string.Join("::", qualification);
SerializedSignature sig = null;
switch (str[i++])
{
case '0':
case '1':
case '2':
case '3':
return new Tuple<string, SerializedType, SerializedType>(
basicName,
ParseDataTypeCode(compoundArgs),
CreateEnclosingType(Scope));
case '6': // Compiler-generated static
//$TODO: deal with const/volatile modifier
ParseStorageClass();
break;
case 'A': sig = ParseInstanceMethod("private"); break;
case 'B': sig = ParseInstanceMethod("private far"); break;
case 'C': sig = ParseStaticMethod("private static"); break;
case 'D': sig = ParseStaticMethod("private static far"); break;
case 'E': sig = ParseInstanceMethod("private virtual"); break;
case 'F': sig = ParseInstanceMethod("private virtual far"); break;
case 'I': sig = ParseInstanceMethod("protected"); break;
case 'J': sig = ParseInstanceMethod("protected far"); break;
case 'K': sig = ParseStaticMethod("protected static"); break;
case 'L': sig = ParseStaticMethod("protected static far"); break;
case 'M': sig = ParseInstanceMethod("protected virtual"); break;
case 'N': sig = ParseInstanceMethod("protected virtual far"); break;
case 'Q': sig = ParseInstanceMethod("public"); break;
case 'R': sig = ParseInstanceMethod("public far"); break;
case 'S': sig = ParseStaticMethod("public static"); break;
case 'T': sig = ParseStaticMethod("public static far"); break;
case 'U': sig = ParseInstanceMethod("public virtual"); break;
case 'V': sig = ParseInstanceMethod("public virtual far"); break;
case 'Y': sig = ParseGlobalFunction( ""); break;
case 'Z': sig = ParseGlobalFunction( "far"); break;
default: throw new NotImplementedException(string.Format("Character '{0}' not supported", str[i - 1]));
}
return new Tuple<string, SerializedType, SerializedType>(
basicName,
sig,
sig != null
? sig.EnclosingType
: CreateEnclosingType(Scope));
}