Esempio n. 1
0
		public CppTypeResolveContext(IAssembly assembly, ResolvedUsingScope usingScope = null, ITypeDefinition typeDefinition = null, IMember member = null)
		{
			if (assembly == null)
				throw new ArgumentNullException("assembly");
			this.assembly = assembly;
			this.currentUsingScope = usingScope;
			this.currentTypeDefinition = typeDefinition;
			this.currentMember = member;
		}
 public CppTypeResolveContext(IAssembly assembly, ResolvedUsingScope usingScope = null, ITypeDefinition typeDefinition = null, IMember member = null)
 {
     if (assembly == null)
     {
         throw new ArgumentNullException("assembly");
     }
     this.assembly              = assembly;
     this.currentUsingScope     = usingScope;
     this.currentTypeDefinition = typeDefinition;
     this.currentMember         = member;
 }
Esempio n. 3
0
        /// <summary>
        /// Resolves the namespace represented by this using scope.
        /// </summary>
        public ResolvedUsingScope Resolve(ICompilation compilation)
        {
            CacheManager       cache    = compilation.CacheManager;
            ResolvedUsingScope resolved = (ResolvedUsingScope)cache.GetShared(this);

            if (resolved == null)
            {
                var csContext = new CppTypeResolveContext(compilation.MainAssembly, parent != null ? parent.Resolve(compilation) : null);
                resolved = (ResolvedUsingScope)cache.GetOrAddShared(this, new ResolvedUsingScope(csContext, this));
            }
            return(resolved);
        }
Esempio n. 4
0
		/// <summary>
		/// Sets the current using scope that is used to look up identifiers as class names.
		/// </summary>
		public CppResolver WithCurrentUsingScope(ResolvedUsingScope usingScope)
		{
			return WithContext(context.WithUsingScope(usingScope));
		}
Esempio n. 5
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;
		}
Esempio n. 6
0
		public CppTypeResolveContext WithUsingScope(ResolvedUsingScope usingScope)
		{
			return new CppTypeResolveContext(assembly, usingScope, currentTypeDefinition, currentMember);
		}
 public CppTypeResolveContext WithUsingScope(ResolvedUsingScope usingScope)
 {
     return(new CppTypeResolveContext(assembly, usingScope, currentTypeDefinition, currentMember));
 }