示例#1
0
        void CheckNamespace(INamespace oNs, INamespace nNs, ref AbiCompatibility compatibility)
        {
            foreach (var type in oNs.Types)
            {
                if (!type.IsPublic && !type.IsProtected)
                {
                    continue;
                }
                var newType = nNs.GetTypeDefinition(type.Name, type.TypeParameterCount);
                if (newType == null)
                {
                    OnIncompatibilityFound(new AbiEventArgs(string.Format(TranslateString("Type definition {0} is missing."), type.FullName)));
                    compatibility = AbiCompatibility.Incompatible;
                    if (StopOnIncompatibility)
                    {
                        return;
                    }
                    continue;
                }
                CheckTypes(type, newType, ref compatibility);
                if (compatibility == AbiCompatibility.Incompatible && StopOnIncompatibility)
                {
                    return;
                }
            }

            if (compatibility == AbiCompatibility.Bigger)
            {
                return;
            }
            foreach (var type in nNs.Types)
            {
                if (!type.IsPublic && !type.IsProtected)
                {
                    continue;
                }
                if (oNs.GetTypeDefinition(type.Name, type.TypeParameterCount) == null)
                {
                    if (compatibility == AbiCompatibility.Equal)
                    {
                        compatibility = AbiCompatibility.Bigger;
                    }
                    return;
                }
            }
        }
示例#2
0
        Expression LookInUsingScopeNamespace(ResolveContext rc, ResolvedUsingScope usingScope, INamespace n, string identifier, IList <IType> typeArguments, bool parameterizeResultType)
        {
            if (n == null)
            {
                return(null);
            }
            // first look for a namespace
            int k = typeArguments.Count;

            if (k == 0)
            {
                INamespace childNamespace = n.GetChildNamespace(identifier);
                if (childNamespace != null)
                {
                    if (usingScope != null && usingScope.HasAlias(identifier))
                    {
                        rc.Report.Error(7, loc, "The name `{0}' is ambigious", name);
                        return(new TypeExpression((IType) new UnknownTypeSpec(null, identifier), Location)); // ambigious
                    }

                    return(new AliasNamespace(childNamespace, Location));
                }
            }
            // then look for a type
            ITypeDefinition def = n.GetTypeDefinition(identifier, k);

            if (def != null)
            {
                IType result = def;
                if (parameterizeResultType && k > 0)
                {
                    result = new ParameterizedTypeSpec(def, typeArguments);
                }

                if (usingScope != null && usingScope.HasAlias(identifier))
                {
                    rc.Report.Error(7, loc, "The name `{0}' is ambigious", name);
                    return(new TypeExpression((IType) new UnknownTypeSpec(null, identifier), Location)); // ambigious
                }
                else
                {
                    return(new TypeExpression(result, Location));
                }
            }
            return(null);
        }
示例#3
0
		ResolveResult LookInUsingScopeNamespace(ResolvedUsingScope usingScope, INamespace n, string identifier, IList<IType> typeArguments, bool parameterizeResultType)
		{
			if (n == null)
				return null;
			// first look for a namespace
			int k = typeArguments.Count;
			if (k == 0) {
				INamespace childNamespace = n.GetChildNamespace(identifier);
				if (childNamespace != null) {
					if (usingScope != null && usingScope.HasAlias(identifier))
						return new AmbiguousTypeResolveResult(new UnknownType(null, identifier));
					return new NamespaceResolveResult(childNamespace);
				}
			}
			// then look for a type
			ITypeDefinition def = n.GetTypeDefinition(identifier, k);
			if (def != null) {
				IType result = def;
				if (parameterizeResultType && k > 0) {
					result = new ParameterizedType(def, typeArguments);
				}
				if (usingScope != null && usingScope.HasAlias(identifier))
					return new AmbiguousTypeResolveResult(result);
				else
					return new TypeResolveResult(result);
			}
			return null;
		}
示例#4
0
        void CheckNamespace(INamespace oNs, INamespace nNs, ref AbiCompatibility compatibility)
        {
            foreach (var type in oNs.Types) {
                if (!type.IsPublic && !type.IsProtected)
                    continue;
                var newType = nNs.GetTypeDefinition (type.Name, type.TypeParameterCount);
                if (newType == null) {
                    OnIncompatibilityFound (new AbiEventArgs (string.Format (TranslateString ("Type definition {0} is missing."), type.FullName)));
                    compatibility = AbiCompatibility.Incompatible;
                    if (StopOnIncompatibility)
                        return;
                    continue;
                }
                CheckTypes (type, newType, ref compatibility);
                if (compatibility == AbiCompatibility.Incompatible && StopOnIncompatibility)
                    return;
            }

            if (compatibility == AbiCompatibility.Bigger)
                return;
            foreach (var type in nNs.Types) {
                if (!type.IsPublic && !type.IsProtected)
                    continue;
                if (oNs.GetTypeDefinition (type.Name, type.TypeParameterCount) == null) {
                    if (compatibility == AbiCompatibility.Equal)
                        compatibility = AbiCompatibility.Bigger;
                    return;
                }
            }
        }