public AssemblyQualifiedNamespaceSymbol CreateNamespaceAid(Name name, ParentSymbol parent, KAID assemblyID) { Debug.Assert(name != null); AssemblyQualifiedNamespaceSymbol sym = newBasicSym(SYMKIND.SK_AssemblyQualifiedNamespaceSymbol, name, parent).AsAssemblyQualifiedNamespaceSymbol(); Debug.Assert(sym != null); return(sym); }
public ErrorType GetErrorType( CType pParentType, AssemblyQualifiedNamespaceSymbol pParentNS, Name nameText, TypeArray typeArgs) { Debug.Assert(nameText != null); Debug.Assert(pParentType == null || pParentNS == null); if (pParentType == null && pParentNS == null) { // Use the root namespace as the parent. pParentNS = _BSymmgr.GetRootNsAid(); } if (typeArgs == null) { typeArgs = BSYMMGR.EmptyTypeArray(); } Name name = _BSymmgr.GetNameFromPtrs(nameText, typeArgs); Debug.Assert(name != null); ErrorType pError = null; if (pParentType != null) { pError = _typeTable.LookupError(name, pParentType); } else { Debug.Assert(pParentNS != null); pError = _typeTable.LookupError(name, pParentNS); } if (pError == null) { // No existing error symbol. Create a new one. pError = _typeFactory.CreateError(name, pParentType, pParentNS, nameText, typeArgs); pError.SetErrors(true); if (pParentType != null) { _typeTable.InsertError(name, pParentType, pError); } else { _typeTable.InsertError(name, pParentNS, pError); } } else { Debug.Assert(pError.HasErrors()); Debug.Assert(pError.nameText == nameText); Debug.Assert(pError.typeArgs == typeArgs); } return(pError); }
public ErrorType LookupError(Name pName, AssemblyQualifiedNamespaceSymbol pParentNS) { var key = new KeyPair <AssemblyQualifiedNamespaceSymbol, Name>(pParentNS, pName); ErrorType result; if (_pErrorWithNamespaceParentTable.TryGetValue(key, out result)) { return(result); } return(null); }
private AssemblyQualifiedNamespaceSymbol GetNsAid(NamespaceSymbol ns) { Name name = GetNameFromPtrs(0, 0); Debug.Assert(name != null); AssemblyQualifiedNamespaceSymbol nsa = LookupGlobalSymCore(name, ns, symbmask_t.MASK_AssemblyQualifiedNamespaceSymbol) as AssemblyQualifiedNamespaceSymbol // Create a new one. ?? _symFactory.CreateNamespaceAid(name, ns); Debug.Assert(nsa.GetNS() == ns); return(nsa); }
public ErrorType CreateError( Name name, CType parent, AssemblyQualifiedNamespaceSymbol pParentNS, Name nameText, TypeArray typeArgs) { ErrorType e = new ErrorType(); e.SetName(name); e.nameText = nameText; e.typeArgs = typeArgs; e.SetTypeParent(parent); e.SetNSParent(pParentNS); e.SetTypeKind(TypeKind.TK_ErrorType); return(e); }
private AssemblyQualifiedNamespaceSymbol GetNsAid(NamespaceSymbol ns, KAID aid) { Name name = GetNameFromPtrs(aid, 0); Debug.Assert(name != null); AssemblyQualifiedNamespaceSymbol nsa = LookupGlobalSymCore(name, ns, symbmask_t.MASK_AssemblyQualifiedNamespaceSymbol).AsAssemblyQualifiedNamespaceSymbol(); if (nsa == null) { // Create a new one. nsa = _symFactory.CreateNamespaceAid(name, ns, aid); } Debug.Assert(nsa.GetNS() == ns); return(nsa); }
public ErrorType CreateError( Name name, CType parent, AssemblyQualifiedNamespaceSymbol pParentNS, Name nameText, TypeArray typeArgs) { ErrorType e = new ErrorType(); e.SetName(name); e.nameText = nameText; e.typeArgs = typeArgs; e.SetTypeParent(parent); e.SetNSParent(pParentNS); e.SetTypeKind(TypeKind.TK_ErrorType); return e; }
public ErrorType GetErrorType( CType pParentType, AssemblyQualifiedNamespaceSymbol pParentNS, Name nameText, TypeArray typeArgs) { Debug.Assert(nameText != null); Debug.Assert(pParentType == null || pParentNS == null); if (pParentType == null && pParentNS == null) { // Use the root namespace as the parent. pParentNS = _BSymmgr.GetRootNsAid(KAID.kaidGlobal); } if (typeArgs == null) { typeArgs = BSYMMGR.EmptyTypeArray(); } Name name = _BSymmgr.GetNameFromPtrs(nameText, typeArgs); Debug.Assert(name != null); ErrorType pError = null; if (pParentType != null) { pError = _typeTable.LookupError(name, pParentType); } else { Debug.Assert(pParentNS != null); pError = _typeTable.LookupError(name, pParentNS); } if (pError == null) { // No existing error symbol. Create a new one. pError = _typeFactory.CreateError(name, pParentType, pParentNS, nameText, typeArgs); pError.SetErrors(true); if (pParentType != null) { _typeTable.InsertError(name, pParentType, pError); } else { _typeTable.InsertError(name, pParentNS, pError); } } else { Debug.Assert(pError.HasErrors()); Debug.Assert(pError.nameText == nameText); Debug.Assert(pError.typeArgs == typeArgs); } Debug.Assert(!pError.IsUnresolved()); return pError; }
public void SetNSParent(AssemblyQualifiedNamespaceSymbol pNS) { _pParentNS = pNS; }
public void InsertError(Name pName, AssemblyQualifiedNamespaceSymbol pParentNS, ErrorType pError) { Debug.Assert(LookupError(pName, pParentNS) == null); _pErrorWithNamespaceParentTable.Add(new KeyPair <AssemblyQualifiedNamespaceSymbol, Name>(pParentNS, pName), pError); }
protected Symbol newBasicSym( SYMKIND kind, Name name, ParentSymbol parent) { // The parser creates names with PN_MISSING when attempting to recover from errors // To prevent spurious errors, we create SYMs with a different name (PN_MISSINGSYM) // so that they are never found when doing lookup. if (name == m_pMissingNameNode) { name = m_pMissingNameSym; } Symbol sym; switch (kind) { case SYMKIND.SK_NamespaceSymbol: sym = new NamespaceSymbol(); sym.name = name; break; case SYMKIND.SK_NamespaceDeclaration: sym = new NamespaceDeclaration(); sym.name = name; break; case SYMKIND.SK_AssemblyQualifiedNamespaceSymbol: sym = new AssemblyQualifiedNamespaceSymbol(); sym.name = name; break; case SYMKIND.SK_AggregateSymbol: sym = new AggregateSymbol(); sym.name = name; break; case SYMKIND.SK_AggregateDeclaration: sym = new AggregateDeclaration(); sym.name = name; break; case SYMKIND.SK_TypeParameterSymbol: sym = new TypeParameterSymbol(); sym.name = name; break; case SYMKIND.SK_FieldSymbol: sym = new FieldSymbol(); sym.name = name; break; case SYMKIND.SK_LocalVariableSymbol: sym = new LocalVariableSymbol(); sym.name = name; break; case SYMKIND.SK_MethodSymbol: sym = new MethodSymbol(); sym.name = name; break; case SYMKIND.SK_PropertySymbol: sym = new PropertySymbol(); sym.name = name; break; case SYMKIND.SK_EventSymbol: sym = new EventSymbol(); sym.name = name; break; case SYMKIND.SK_TransparentIdentifierMemberSymbol: sym = new TransparentIdentifierMemberSymbol(); sym.name = name; break; case SYMKIND.SK_Scope: sym = new Scope(); sym.name = name; break; case SYMKIND.SK_LabelSymbol: sym = new LabelSymbol(); sym.name = name; break; case SYMKIND.SK_GlobalAttributeDeclaration: sym = new GlobalAttributeDeclaration(); sym.name = name; break; case SYMKIND.SK_UnresolvedAggregateSymbol: sym = new UnresolvedAggregateSymbol(); sym.name = name; break; case SYMKIND.SK_InterfaceImplementationMethodSymbol: sym = new InterfaceImplementationMethodSymbol(); sym.name = name; break; case SYMKIND.SK_IndexerSymbol: sym = new IndexerSymbol(); sym.name = name; break; case SYMKIND.SK_ParentSymbol: sym = new ParentSymbol(); sym.name = name; break; case SYMKIND.SK_IteratorFinallyMethodSymbol: sym = new IteratorFinallyMethodSymbol(); sym.name = name; break; default: throw Error.InternalCompilerError(); } sym.setKind(kind); if (parent != null) { // Set the parent element of the child symbol. parent.AddToChildList(sym); m_pSymTable.InsertChild(parent, sym); } return (sym); }
protected Symbol newBasicSym( SYMKIND kind, Name name, ParentSymbol parent) { Symbol sym; switch (kind) { case SYMKIND.SK_NamespaceSymbol: sym = new NamespaceSymbol(); sym.name = name; break; case SYMKIND.SK_AssemblyQualifiedNamespaceSymbol: sym = new AssemblyQualifiedNamespaceSymbol(); sym.name = name; break; case SYMKIND.SK_AggregateSymbol: sym = new AggregateSymbol(); sym.name = name; break; case SYMKIND.SK_AggregateDeclaration: sym = new AggregateDeclaration(); sym.name = name; break; case SYMKIND.SK_TypeParameterSymbol: sym = new TypeParameterSymbol(); sym.name = name; break; case SYMKIND.SK_FieldSymbol: sym = new FieldSymbol(); sym.name = name; break; case SYMKIND.SK_LocalVariableSymbol: sym = new LocalVariableSymbol(); sym.name = name; break; case SYMKIND.SK_MethodSymbol: sym = new MethodSymbol(); sym.name = name; break; case SYMKIND.SK_PropertySymbol: sym = new PropertySymbol(); sym.name = name; break; case SYMKIND.SK_EventSymbol: sym = new EventSymbol(); sym.name = name; break; case SYMKIND.SK_Scope: sym = new Scope(); sym.name = name; break; case SYMKIND.SK_IndexerSymbol: sym = new IndexerSymbol(); sym.name = name; break; default: throw Error.InternalCompilerError(); } sym.setKind(kind); if (parent != null) { // Set the parent element of the child symbol. parent.AddToChildList(sym); m_pSymTable.InsertChild(parent, sym); } return(sym); }
protected Symbol newBasicSym( SYMKIND kind, Name name, ParentSymbol parent) { // The parser creates names with PN_MISSING when attempting to recover from errors // To prevent spurious errors, we create SYMs with a different name (PN_MISSINGSYM) // so that they are never found when doing lookup. if (name == m_pMissingNameNode) { name = m_pMissingNameSym; } Symbol sym; switch (kind) { case SYMKIND.SK_NamespaceSymbol: sym = new NamespaceSymbol(); sym.name = name; break; case SYMKIND.SK_NamespaceDeclaration: sym = new NamespaceDeclaration(); sym.name = name; break; case SYMKIND.SK_AssemblyQualifiedNamespaceSymbol: sym = new AssemblyQualifiedNamespaceSymbol(); sym.name = name; break; case SYMKIND.SK_AggregateSymbol: sym = new AggregateSymbol(); sym.name = name; break; case SYMKIND.SK_AggregateDeclaration: sym = new AggregateDeclaration(); sym.name = name; break; case SYMKIND.SK_TypeParameterSymbol: sym = new TypeParameterSymbol(); sym.name = name; break; case SYMKIND.SK_FieldSymbol: sym = new FieldSymbol(); sym.name = name; break; case SYMKIND.SK_LocalVariableSymbol: sym = new LocalVariableSymbol(); sym.name = name; break; case SYMKIND.SK_MethodSymbol: sym = new MethodSymbol(); sym.name = name; break; case SYMKIND.SK_PropertySymbol: sym = new PropertySymbol(); sym.name = name; break; case SYMKIND.SK_EventSymbol: sym = new EventSymbol(); sym.name = name; break; case SYMKIND.SK_TransparentIdentifierMemberSymbol: sym = new TransparentIdentifierMemberSymbol(); sym.name = name; break; case SYMKIND.SK_Scope: sym = new Scope(); sym.name = name; break; case SYMKIND.SK_LabelSymbol: sym = new LabelSymbol(); sym.name = name; break; case SYMKIND.SK_GlobalAttributeDeclaration: sym = new GlobalAttributeDeclaration(); sym.name = name; break; case SYMKIND.SK_UnresolvedAggregateSymbol: sym = new UnresolvedAggregateSymbol(); sym.name = name; break; case SYMKIND.SK_InterfaceImplementationMethodSymbol: sym = new InterfaceImplementationMethodSymbol(); sym.name = name; break; case SYMKIND.SK_IndexerSymbol: sym = new IndexerSymbol(); sym.name = name; break; case SYMKIND.SK_ParentSymbol: sym = new ParentSymbol(); sym.name = name; break; case SYMKIND.SK_IteratorFinallyMethodSymbol: sym = new IteratorFinallyMethodSymbol(); sym.name = name; break; default: throw Error.InternalCompilerError(); } sym.setKind(kind); if (parent != null) { // Set the parent element of the child symbol. parent.AddToChildList(sym); m_pSymTable.InsertChild(parent, sym); } return(sym); }