<PackageReference Include="Microsoft.CSharp" Version="4.5.0" />

Symbol

abstract class Symbol
using Microsoft.CSharp.RuntimeBinder.Syntax; using System.Reflection; namespace Microsoft.CSharp.RuntimeBinder.Semantics { internal abstract class Symbol { private SYMKIND _kind; private ACCESS _access; public Name name; public ParentSymbol parent; public Symbol nextChild; public Symbol nextSameName; public bool isStatic { get { FieldSymbol fieldSymbol; if ((fieldSymbol = (this as FieldSymbol)) != null) return fieldSymbol.isStatic; EventSymbol eventSymbol; if ((eventSymbol = (this as EventSymbol)) != null) return eventSymbol.isStatic; MethodOrPropertySymbol methodOrPropertySymbol; if ((methodOrPropertySymbol = (this as MethodOrPropertySymbol)) != null) return methodOrPropertySymbol.isStatic; return this is AggregateSymbol; } } public Symbol LookupNext(symbmask_t kindmask) { for (Symbol symbol = nextSameName; symbol != null; symbol = symbol.nextSameName) { if ((kindmask & symbol.mask()) != (symbmask_t)0) return symbol; } return null; } public ACCESS GetAccess() { return _access; } public void SetAccess(ACCESS access) { _access = access; } public SYMKIND getKind() { return _kind; } public void setKind(SYMKIND kind) { _kind = kind; } public symbmask_t mask() { return (symbmask_t)(1 << (int)_kind); } public CType getType() { MethodOrPropertySymbol methodOrPropertySymbol; if ((methodOrPropertySymbol = (this as MethodOrPropertySymbol)) != null) return methodOrPropertySymbol.RetType; FieldSymbol fieldSymbol; if ((fieldSymbol = (this as FieldSymbol)) != null) return fieldSymbol.GetType(); EventSymbol eventSymbol; if ((eventSymbol = (this as EventSymbol)) != null) return eventSymbol.type; return null; } private Assembly GetAssembly() { switch (_kind) { case SYMKIND.SK_TypeParameterSymbol: case SYMKIND.SK_FieldSymbol: case SYMKIND.SK_MethodSymbol: case SYMKIND.SK_PropertySymbol: case SYMKIND.SK_EventSymbol: return ((AggregateSymbol)parent).AssociatedAssembly; case SYMKIND.SK_AggregateSymbol: return ((AggregateSymbol)this).AssociatedAssembly; default: return null; } } private bool InternalsVisibleTo(Assembly assembly) { switch (_kind) { case SYMKIND.SK_TypeParameterSymbol: case SYMKIND.SK_FieldSymbol: case SYMKIND.SK_MethodSymbol: case SYMKIND.SK_PropertySymbol: case SYMKIND.SK_EventSymbol: return ((AggregateSymbol)parent).InternalsVisibleTo(assembly); case SYMKIND.SK_AggregateSymbol: return ((AggregateSymbol)this).InternalsVisibleTo(assembly); default: return false; } } public bool SameAssemOrFriend(Symbol sym) { Assembly assembly = GetAssembly(); if (!(assembly == sym.GetAssembly())) return sym.InternalsVisibleTo(assembly); return true; } public bool IsOverride() { SYMKIND kind = _kind; if ((uint)(kind - 5) <= 1) return ((MethodOrPropertySymbol)this).isOverride; if (kind == SYMKIND.SK_EventSymbol) return ((EventSymbol)this).isOverride; return false; } public bool IsHideByName() { SYMKIND kind = _kind; if ((uint)(kind - 5) <= 1) return ((MethodOrPropertySymbol)this).isHideByName; if (kind == SYMKIND.SK_EventSymbol) return ((EventSymbol)this).methAdd?.isHideByName ?? false; return true; } public bool isUserCallable() { MethodSymbol methodSymbol; if ((methodSymbol = (this as MethodSymbol)) != null) return methodSymbol.isUserCallable(); return true; } } }