コード例 #1
0
        public StringBuilder VisitQualifiedType(QualifiedType_v1 qt)
        {
            var isPtrLike = (qt.DataType is PointerType_v1 || qt.DataType is ReferenceType_v1);

            if (isPtrLike)
            {
                qt.DataType.Accept(this);
                switch (qt.Qualifier)
                {
                case Qualifier.Const: sb.Append(" const"); break;

                case Qualifier.Volatile: sb.Append(" volatile"); break;

                case Qualifier.Restricted: sb.Append(" restrict"); break;
                }
            }
            else
            {
                switch (qt.Qualifier)
                {
                case Qualifier.Const: sb.Append("const "); break;

                case Qualifier.Volatile: sb.Append("volatile "); break;

                case Qualifier.Restricted: sb.Append("restrict "); break;
                }
                qt.DataType.Accept(this);
            }
            return(sb);
        }
コード例 #2
0
            public StringBuilder VisitQualifiedType(QualifiedType_v1 qt)
            {
                qt.DataType.Accept(this);
                switch (qt.Qualifier)
                {
                case Qualifier.Const: sb.Append(" const"); break;

                case Qualifier.Volatile: sb.Append(" volatile"); break;

                case Qualifier.Restricted: sb.Append(" restrict"); break;
                }
                return(sb);
            }
コード例 #3
0
ファイル: MsMangledNameParser.cs プロジェクト: smx-smx/reko
        public SerializedType ParsePointer(List <Argument_v1> compoundArgs, Qualifier q)
        {
            int            size = 4; //$TODO: should follow platform pointer size, really.
            SerializedType type;

            if (PeekAndDiscard('E')) // 64-bit pointer
            {
                size = 8;
            }
            switch (str[i++])
            {
            case 'A': type = ParseDataTypeCode(new List <Argument_v1>()); break;                                                //$BUG: assumes 32-bitness

            case 'B': type = Qualify(ParseDataTypeCode(new List <Argument_v1>()), Qualifier.Const); break;                      // const ptr

            case 'C': type = Qualify(ParseDataTypeCode(new List <Argument_v1>()), Qualifier.Volatile); break;                   // volatile ptr

            case 'D': type = Qualify(ParseDataTypeCode(new List <Argument_v1>()), Qualifier.Const | Qualifier.Volatile); break; // const volatile ptr

            case '6': type = ParseFunctionTypeCode(); break;                                                                    // fn ptr

            case '8': return(ParseMemberFunctionPointerCode(size, compoundArgs));

            default: Error("Unsupported pointer code 'P{0}'.", str[i - 1]); return(null);
            }
            SerializedType pType = new PointerType_v1
            {
                DataType    = type,
                PointerSize = size,
            };

            if (q != Qualifier.None)
            {
                pType = new QualifiedType_v1
                {
                    DataType  = pType,
                    Qualifier = q,
                };
            }
            compoundArgs.Add(new Argument_v1 {
                Type = pType
            });
            return(pType);
        }
コード例 #4
0
        public DataType VisitQualifiedType(QualifiedType_v1 qt)
        {
            var dt = qt.DataType.Accept(this);

            return(new QualifiedType(dt, qt.Qualifier));
        }
コード例 #5
0
 public bool VisitQualifiedType(QualifiedType_v1 qX)
 {
     y = ((QualifiedType_v1)y).DataType;
     return(qX.DataType.Accept(this));
 }
コード例 #6
0
 public int VisitQualifiedType(QualifiedType_v1 qt)
 {
     return(qt.DataType.Accept(this));
 }
コード例 #7
0
 public DataType VisitQualifiedType(QualifiedType_v1 qt)
 {
     return(new QualifiedType(qt.DataType.Accept(this), qt.Qualifier));
 }