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; }
/// <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); }
/// <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)); }
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; }
public CppTypeResolveContext WithUsingScope(ResolvedUsingScope usingScope) { return new CppTypeResolveContext(assembly, usingScope, currentTypeDefinition, currentMember); }
public CppTypeResolveContext WithUsingScope(ResolvedUsingScope usingScope) { return(new CppTypeResolveContext(assembly, usingScope, currentTypeDefinition, currentMember)); }