Пример #1
0
        public string WrapWithUmlQualifiers(string descriptor)
        {
            if (Qualifiers.Contains(Qualifier.Private))
            {
                descriptor = "-" + descriptor;
            }
            else if (Qualifiers.Contains(Qualifier.Protected))
            {
                descriptor = "#" + descriptor;
            }
            else if (Qualifiers.Contains(Qualifier.Public))
            {
                descriptor = "+" + descriptor;
            }
            else
            {
                descriptor = "~" + descriptor;
            }

            if (Qualifiers.Contains(Qualifier.Abstract))
            {
                descriptor = "/" + descriptor + "/";
            }
            if (Qualifiers.Contains(Qualifier.Static))
            {
                descriptor = "_" + descriptor + "_";
            }

            return(descriptor);
        }
Пример #2
0
 public CppTypeVisitorResult Visit(CppLinkageCliArrayType t, Qualifiers q)
 {
     this.TypeBuilder.Append($"LinkageArray");
     this.DbgBuilder.Append(t.DbgDescription + " ");
     this.QualifierBuilder.Append(q.ToString("g") + " ");
     return(null);
 }
Пример #3
0
 public CppTypeVisitorResult Visit(CppNumericType t, Qualifiers q)
 {
     this.TypeBuilder.Append($"Numeric");
     this.DbgBuilder.Append(t.DbgDescription + " ");
     this.QualifierBuilder.Append(q.ToString("g") + " ");
     return(null);
 }
Пример #4
0
 public CppTypeVisitorResult Visit(CppDependentLinkageEntityType t, Qualifiers q)
 {
     this.TypeBuilder.Append($"DependentLinkageEntity");
     this.DbgBuilder.Append(t.DbgDescription + " ");
     this.QualifierBuilder.Append(q.ToString("g") + " ");
     return(null);
 }
Пример #5
0
 public CppTypeVisitorResult Visit(CppLinkageTemplateParameterType t, Qualifiers q)
 {
     this.TypeBuilder.Append($"LinkageTemplateParameter");
     this.DbgBuilder.Append(t.DbgDescription + " ");
     this.QualifierBuilder.Append(q.ToString("g") + " ");
     return(null);
 }
Пример #6
0
 public CppTypeVisitorResult Visit(CppDeclarationSpecifierType t, Qualifiers q)
 {
     this.TypeBuilder.Append($"DeclarationSpecifier");
     this.DbgBuilder.Append(t.DbgDescription + " ");
     this.QualifierBuilder.Append(q.ToString("g") + " ");
     return(null);
 }
Пример #7
0
 public CppTypeVisitorResult Visit(CppDeducedClassTypePlaceholder A_0, Qualifiers A_1)
 {
     this.TypeBuilder.Append($"DeducedClassTypePlaceholder");
     this.DbgBuilder.Append(A_0.DbgDescription + " ");
     this.QualifierBuilder.Append(A_1.ToString("g") + " ");
     return(null);
 }
Пример #8
0
 public CppTypeVisitorResult Visit(CppElaboratedTypeReference t, Qualifiers q)
 {
     this.TypeBuilder.Append($"ElaboratedTypeReference");
     this.DbgBuilder.Append(t.DbgDescription + " ");
     this.QualifierBuilder.Append(q.ToString("g") + " ");
     return(null);
 }
Пример #9
0
 public CppTypeVisitorResult Visit(CppFunctionType t, Qualifiers q)
 {
     // has inner type
     this.TypeBuilder.Append($"Function()");
     this.DbgBuilder.Append(t.DbgDescription + " ");
     this.QualifierBuilder.Append(q.ToString("g") + " ");
     return(null);
 }
Пример #10
0
 public CppTypeVisitorResult Visit(CppCliInteriorPointerType t, Qualifiers q)
 {
     // has inner type
     this.TypeBuilder.Append($"CliInteriorPointer");
     this.DbgBuilder.Append(t.DbgDescription + " ");
     this.QualifierBuilder.Append(q.ToString("g") + " ");
     return(null);
 }
Пример #11
0
        public CppTypeVisitorResult Visit(CppResolvedClassType t, Qualifiers q)
        {
            this.TypeBuilder.Append($"ResolvedClassType");
            this.DbgBuilder.Append(t.DbgDescription + " ");
            this.QualifierBuilder.Append(q.ToString("g") + " ");

            this.NameBuilder.Append(t.ResolveEntity.Name + " ");
            return(null);
        }
Пример #12
0
        public CppTypeVisitorResult Visit(CppEnumType t, Qualifiers q)
        {
            this.TypeBuilder.Append($"Enum");
            this.DbgBuilder.Append(t.DbgDescription + " ");
            this.QualifierBuilder.Append(q.ToString("g") + " ");

            this.NameBuilder.Append(t.Symbol.Name + " ");
            return(null);
        }
Пример #13
0
        public bool Dispatch(IInvocationContext invocationContext, Exception exception, IQualifier[] qualifierArray)
        {
            var qualifiers = new Qualifiers(qualifierArray);
            var context    = new ExceptionHandlingContext(invocationContext, exception, qualifiers);

            DispatchCauses(exception, context, qualifiers);

            return(context.IsMarkedHandled == true);
        }
Пример #14
0
 /// <inheritdoc />
 public override string ToString()
 {
     return(string.Format(
                "{0}{1} {2}{3}{4}",
                Qualifiers.ToString(false),
                Type,
                Name,
                Qualifiers.ToString(true),
                InitialValue != null ? " = " + InitialValue : string.Empty));
 }
Пример #15
0
        public CppTypeVisitorResult Visit(CppCliHandleType t, Qualifiers q)
        {
            // has inner type
            this.TypeBuilder.Append($"CliHandleType");
            this.DbgBuilder.Append(t.DbgDescription + " ");
            this.QualifierBuilder.Append(q.ToString("g") + " ");

            t.InnerType.Accept(this);

            return(null);
        }
Пример #16
0
        public bool CanSatisfy(IEnumerable <IQualifier> qualifiers)
        {
            var qualifierTypes = qualifiers.Select(x => x.GetType()).ToArray();

            if (qualifierTypes.Contains(typeof(AnyAttribute)))
            {
                return(true);
            }

            return(qualifierTypes.All(Qualifiers.Select(x => x.GetType()).Contains));
        }
Пример #17
0
        /// <summary>
        /// Match this typeName to a candidate typeName. This type support wildcard matching against
        /// the candidate
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        public bool Match(TypeName t)
        {
            if (IsWildcard)
            {
                return(true);
            }

            if (Qualifiers.Count != t.Qualifiers.Count)
            {
                return(false);
            }

            if (BaseName != t.BaseName)
            {
                return(false);
            }

            if (Qualifiers.Where((qualifier, i) => !qualifier.Match(t.Qualifiers[i])).Any())
            {
                return(false);
            }

            // args must match one-for one,
            // or if last arg is a wildcard it will match any number of additional args
            if (Args.Count > t.Args.Count || (Args.Count == 0 && t.Args.Count > 0) ||
                (Args.Count < t.Args.Count && !Args[Args.Count - 1].IsWildcard))
            {
                return(false);
            }

            if (Args.Where((arg, i) => !arg.Match(t.Args[i])).Any())
            {
                return(false);
            }

            if (IsArray != t.IsArray)
            {
                return(false);
            }

            if (!IsArray)
            {
                return(true);
            }

            if (Dimensions.Length != t.Dimensions.Length)
            {
                return(false);
            }

            return(Dimensions.Where((dimension, i) => dimension != t.Dimensions[i])
                   .All(dimension => dimension == -1));
        }
Пример #18
0
 public override void Cancel()
 {
     if (ObjectState == ObjectStates.Added)
     {
         Remove();
     }
     else if (ObjectState != ObjectStates.None)
     {
         _qualifier = OriginalValues._qualifier;
         //_dataFieldValue = OriginalValues._dataFieldValue;
     }
 }
Пример #19
0
 public FunctionType(
     Node ret, NodeArray fparams,
     Qualifiers cvQuals, FunctionRefQual refQual,
     Node exceptionSpec
     ) : base(ItaniumDemangleNodeType.FunctionType, Cache.Yes, Cache.No, Cache.Yes)
 {
     this.ret           = ret;
     this.fparams       = fparams;
     this.cvQuals       = cvQuals;
     this.refQual       = refQual;
     this.exceptionSpec = exceptionSpec;
 }
Пример #20
0
 public FunctionEncoding(
     Node ret, Node name,
     NodeArray fparams, Node attrs,
     Qualifiers cvQuals, FunctionRefQual refQual
     ) : base(ItaniumDemangleNodeType.FunctionEncoding, Cache.Yes, Cache.No, Cache.Yes)
 {
     this.ReturnType = ret;
     this.Name       = name;
     this.Params     = fparams;
     this.attrs      = attrs;
     this.CVQuals    = cvQuals;
     this.RefQual    = refQual;
 }
Пример #21
0
 public override void Cancel()
 {
     if (ObjectState == ObjectStates.Added)
     {
         ((ValidationConditions)Parent).InternalRemove(this);
     }
     else if (ObjectState != ObjectStates.None)
     {
         _qualifier       = OriginalValues._qualifier;
         _validationType  = OriginalValues._validationType;
         _validationValue = OriginalValues._validationValue;
     }
 }
Пример #22
0
        public bool OutputQualifierIfPresent(OutputStream os, Qualifiers Q, Qualifiers Mask, bool needSpace)
        {
            if (!(Q.HasFlag(Mask)))
            {
                return(needSpace);
            }

            if (needSpace)
            {
                os.Append(' ');
            }

            OutputSingleQualifier(os, Mask);
            return(true);
        }
        public Pb.Filter ConvertToPBFilter()
        {
            var internalFilter = new Pb.FirstKeyValueMatchingQualifiersFilter();

            if (Qualifiers?.Any() == true)
            {
                internalFilter.Qualifiers.AddRange(Qualifiers.Select(ByteString.CopyFrom).ToArray());
            }

            var filter = new Pb.Filter
            {
                Name             = Name,
                SerializedFilter = internalFilter.ToByteString()
            };

            return(filter);
        }
Пример #24
0
        public void OutputQualifiers(OutputStream os, Qualifiers Q, bool spaceBefore, bool spaceAfter)
        {
            if (Q == Qualifiers.None)
            {
                return;
            }

            int pos1 = os.Length;

            spaceBefore = OutputQualifierIfPresent(os, Q, Qualifiers.Const, spaceBefore);
            spaceBefore = OutputQualifierIfPresent(os, Q, Qualifiers.Volatile, spaceBefore);
            spaceBefore = OutputQualifierIfPresent(os, Q, Qualifiers.Restrict, spaceBefore);
            int pos2 = os.Length;

            if (spaceAfter && pos2 > pos1)
            {
                os.Append(' ');
            }
        }
Пример #25
0
        // Equality and comparers

        /// <summary>
        /// Returns the hashcode for this <see cref="InlineMergeRequest"/>.
        /// </summary>
        /// <returns>The hashcode value.</returns>
        public override int GetHashCode()
        {
            // Make sure to return if it is already provided
            if (!ReferenceEquals(null, m_hashCode))
            {
                return(m_hashCode.Value);
            }

            // Get first the entity hash code
            var hashCode = $"InlineMerge.{EntityType.FullName}".GetHashCode();

            // Gets the target fields
            if (Fields != null)
            {
                Fields.ToList().ForEach(field =>
                {
                    hashCode += field.GetHashCode();
                });
            }

            // Gets the qualifier fields
            if (Qualifiers != null)
            {
                Qualifiers.ToList().ForEach(field =>
                {
                    hashCode += field.GetHashCode();
                });
            }

            // Override ignore hashcode
            if (OverrideIgnore != null)
            {
                hashCode += OverrideIgnore.GetHashCode();
            }

            // Set back the hash code value
            m_hashCode = hashCode;

            // Return the actual value
            return(hashCode);
        }
Пример #26
0
        public bool OutputSingleQualifier(OutputStream os, Qualifiers Q)
        {
            switch (Q)
            {
            case Qualifiers.Const:
                os.Append("const");
                return(true);

            case Qualifiers.Volatile:
                os.Append("volatile");
                return(true);

            case Qualifiers.Restrict:
                os.Append("__restrict");
                return(true);

            default:
                break;
            }
            return(false);
        }
Пример #27
0
    void M()
    {
        var q = Field;

        q = Property;
        q = Method();

        q = this.Field;
        q = this.Property;
        q = this.Method();

        q = StaticField;
        q = StaticProperty;
        q = StaticMethod();

        q = Qualifiers.StaticField;
        q = Qualifiers.StaticProperty;
        q = Qualifiers.StaticMethod();

        q = Qualifiers.StaticField.Field;
        q = Qualifiers.StaticProperty.Property;
        q = Qualifiers.StaticMethod().Method();
    }
Пример #28
0
 public MethodWithQualifiers(AST Method = default, Qualifiers Qualifiers = default, @string RefQualifier = default)
 {
     this.Method       = Method;
     this.Qualifiers   = Qualifiers;
     this.RefQualifier = RefQualifier;
 }
Пример #29
0
 public string GetQualifierValue(string qualifierName)
 {
     return(Qualifiers.FirstOrDefault(qualifier => qualifier.QualifierName == qualifierName)?.QualifierValue);
 }
Пример #30
0
 public QualType(Node child, Qualifiers quals) : base(ItaniumDemangleNodeType.QualType, child.RHSComponentCache, child.ArrayCache, child.FunctionCache)
 {
     this.child = child;
     this.quals = quals;
 }