/// <summary>
 ///     Resolve namespace, type or function <paramref name="name" /> in the <paramref name="metadataMember" />
 /// </summary>
 internal MetadataMember ResolveMetadataMemberAccess(MetadataMember metadataMember, string name, ErrorContext errCtx)
 {
     return(TypeResolver.ResolveMetadataMemberAccess(metadataMember, name, errCtx));
 }
예제 #2
0
        internal bool TryResolveDotExprAsGroupKeyAlternativeName(
            DotExpr dotExpr,
            out ValueExpression groupKeyResolution)
        {
            groupKeyResolution = (ValueExpression)null;
            string[]   names;
            ScopeEntry scopeEntry;
            int        scopeIndex;

            if (this.IsInAnyGroupScope() && dotExpr.IsMultipartIdentifier(out names) && this.TryScopeLookup(TypeResolver.GetFullName(names), out scopeEntry, out scopeIndex))
            {
                IGetAlternativeName getAlternativeName = scopeEntry as IGetAlternativeName;
                if (getAlternativeName != null && getAlternativeName.AlternativeName != null && ((IEnumerable <string>)names).SequenceEqual <string>((IEnumerable <string>)getAlternativeName.AlternativeName, (IEqualityComparer <string>) this.NameComparer))
                {
                    this.SetScopeRegionCorrelationFlag(scopeIndex);
                    groupKeyResolution = new ValueExpression(this.GetExpressionFromScopeEntry(scopeEntry, scopeIndex, TypeResolver.GetFullName(names), dotExpr.ErrCtx));
                    return(true);
                }
            }
            return(false);
        }
 internal MetadataMember ResolveMetadataMemberName(string[] name, ErrorContext errCtx)
 {
     return(TypeResolver.ResolveMetadataMemberName(name, errCtx));
 }
예제 #4
0
        internal MetadataMember ResolveUnqualifiedName(
            string name,
            bool partOfQualifiedName,
            ErrorContext errCtx)
        {
            bool flag1 = partOfQualifiedName && this._resolveLeftMostUnqualifiedNameAsNamespaceOnly;
            bool flag2 = !partOfQualifiedName;
            InlineFunctionGroup inlineFunctionGroup;

            if (!flag1 && flag2 && this.TryGetInlineFunction(name, out inlineFunctionGroup))
            {
                return((MetadataMember)inlineFunctionGroup);
            }
            MetadataNamespace metadataNamespace;

            if (this._aliasedNamespaces.TryGetValue(name, out metadataNamespace))
            {
                return((MetadataMember)metadataNamespace);
            }
            if (!flag1)
            {
                MetadataType          type1          = (MetadataType)null;
                MetadataFunctionGroup functionGroup1 = (MetadataFunctionGroup)null;
                if (!this.TryGetTypeFromMetadata(name, out type1) && flag2)
                {
                    string[] strArray = name.Split('.');
                    if (strArray.Length > 1 && ((IEnumerable <string>)strArray).All <string>((Func <string, bool>)(p => p.Length > 0)))
                    {
                        string functionName = strArray[strArray.Length - 1];
                        this.TryGetFunctionFromMetadata(name.Substring(0, name.Length - functionName.Length - 1), functionName, out functionGroup1);
                    }
                }
                MetadataNamespace ns2 = (MetadataNamespace)null;
                foreach (MetadataNamespace ns1 in this._namespaces)
                {
                    MetadataType type2;
                    if (this.TryGetTypeFromMetadata(TypeResolver.GetFullName(ns1.Name, name), out type2))
                    {
                        if (type1 != null || functionGroup1 != null)
                        {
                            throw TypeResolver.AmbiguousMetadataMemberName(errCtx, name, ns1, ns2);
                        }
                        type1 = type2;
                        ns2   = ns1;
                    }
                    MetadataFunctionGroup functionGroup2;
                    if (flag2 && this.TryGetFunctionFromMetadata(ns1.Name, name, out functionGroup2))
                    {
                        if (type1 != null || functionGroup1 != null)
                        {
                            throw TypeResolver.AmbiguousMetadataMemberName(errCtx, name, ns1, ns2);
                        }
                        functionGroup1 = functionGroup2;
                        ns2            = ns1;
                    }
                }
                if (type1 != null)
                {
                    return((MetadataMember)type1);
                }
                if (functionGroup1 != null)
                {
                    return((MetadataMember)functionGroup1);
                }
            }
            return((MetadataMember) new MetadataNamespace(name));
        }