internal override ImmutableArray <NamedTypeSymbol> GetDeclaredInterfaces(ConsList <Symbol> basesBeingResolved) { var ifaces = new HashSet <NamedTypeSymbol>(); foreach (var i in _syntax.ImplementsList) { var t = (NamedTypeSymbol)DeclaringCompilation.GetTypeByMetadataName(i.ClassName.ClrName()) ?? new MissingMetadataTypeSymbol(i.ClassName.ClrName(), 0, false); if (t.Arity != 0) { throw new NotImplementedException(); // generics } ifaces.Add(t); } // __invoke => IPhpCallable if (IsInvokable) { ifaces.Add(DeclaringCompilation.CoreTypes.IPhpCallable); } // return(ifaces.AsImmutable()); }
NamedTypeSymbol ResolveBaseType(DiagnosticBag diagnostics) { NamedTypeSymbol btype; if (_syntax.BaseClass != null) { var baseTypeName = _syntax.BaseClass.ClassName; if (baseTypeName == this.MakeQualifiedName()) { // TODO: Err diagnostics throw new NotImplementedException($"cycle in class hierarchy, {this.MakeQualifiedName()} extends itself."); } btype = (NamedTypeSymbol)DeclaringCompilation.GetTypeByMetadataName(baseTypeName.ClrName()) ?? new MissingMetadataTypeSymbol(baseTypeName.ClrName(), 0, false); if (btype.Arity != 0) { // TODO: Err diagnostics throw new NotImplementedException($"Class {this.MakeQualifiedName()} extends a generic type {baseTypeName}."); // generics not supported yet } } else if (!IsStatic && !IsInterface) { btype = DeclaringCompilation.CoreTypes.Object.Symbol; } else { btype = null; } // return(btype); }