Reko.Environments.Windows.MsMangledNameParser.Parse C# (CSharp) Method

Parse() public method

public Parse ( ) : Tuple
return Tuple
        public Tuple<string,SerializedType,SerializedType> Parse()
        {
            Expect('?');
            string basicName = ParseBasicName();
            Tuple<string, SerializedType, SerializedType> typeCode;
            var compoundArgs =     new List<Argument_v1>();
            if (PeekAndDiscard('@'))
            {
                typeCode = ParseUnqualifiedTypeCode(basicName);
            }
            else
            {
                string[] qualification = ParseQualification();
                basicName = string.Format(basicName, qualification.Last());
                typeCode = ParseQualifiedTypeCode(basicName, qualification, compoundArgs);
            }
            return typeCode;
        }

Usage Example

Esempio n. 1
0
 public static Tuple <string, DataType, SerializedType> InferTypeFromName(string fnName, TypeLibraryDeserializer loader, IPlatform platform)
 {
     if (fnName[0] == '?')
     {
         // Microsoft-mangled signatures begin with '?'
         var pmnp = new MsMangledNameParser(fnName);
         Tuple <string, SerializedType, SerializedType> field = null;
         try
         {
             field = pmnp.Parse();
         }
         catch (Exception ex)
         {
             Debug.Print("*** Error parsing {0}. {1}", fnName, ex.Message);
             return(null);
         }
         var sproc = field.Item2 as SerializedSignature;
         if (sproc != null)
         {
             var sser = platform.CreateProcedureSerializer(loader, sproc.Convention);
             var sig  = sser.Deserialize(sproc, platform.Architecture.CreateFrame());   //$BUGBUG: catch dupes?
             return(new Tuple <string, DataType, SerializedType>(
                        field.Item1,
                        sig,
                        field.Item3));
         }
         else
         {
             var dt = field.Item2.Accept(loader);
             return(Tuple.Create(field.Item1, dt, field.Item3));
         }
     }
     return(null);
 }
All Usage Examples Of Reko.Environments.Windows.MsMangledNameParser::Parse