<PackageReference Include="Microsoft.CSharp" Version="4.6.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 => (this as FieldSymbol)?.isStatic ?? (this as EventSymbol)?.isStatic ?? (this as MethodOrPropertySymbol)?.isStatic ?? (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 = this as MethodOrPropertySymbol; if (methodOrPropertySymbol != null) return methodOrPropertySymbol.RetType; FieldSymbol fieldSymbol = this as FieldSymbol; if (fieldSymbol != null) return fieldSymbol.GetType(); return (this as EventSymbol)?.type; } 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() { return (this as MethodSymbol)?.isUserCallable() ?? true; } } }