void ResolveBaseTypes(Boo.Lang.List visited, TypeDefinition node) { visited.Add(node); int removed = 0; int index = 0; foreach (SimpleTypeReference type in node.BaseTypes.ToArray()) { NameResolutionService.ResolveSimpleTypeReference(type); AbstractInternalType internalType = type.Entity as AbstractInternalType; if (null != internalType) { if (visited.Contains(internalType.TypeDefinition)) { Error(CompilerErrorFactory.InheritanceCycle(type, internalType.FullName)); node.BaseTypes.RemoveAt(index - removed); ++removed; } else { ResolveBaseTypes(visited, internalType.TypeDefinition); } } ++index; } }
private void CheckParameterUniqueness(Method method) { Boo.Lang.List parameters = new Boo.Lang.List(); foreach (ParameterDeclaration parameter in method.Parameters) { if (parameters.Contains(parameter.Name)) { Errors.Add(CompilerErrorFactory.DuplicateParameterName(parameter, parameter.Name, method.Name)); } parameters.Add(parameter.Name); } }
private void CheckParameterUniqueness(Method method) { Boo.Lang.List parameters = new Boo.Lang.List(); foreach (ParameterDeclaration parameter in method.Parameters) { if (parameters.Contains(parameter.Name)) { Errors.Add( CompilerErrorFactory.DuplicateParameterName( parameter, parameter.Name, GetEntity(method).ToString())); } parameters.Add(parameter.Name); } }
bool IsAbstract(IType type) { if (type.IsAbstract) { return(true); } AbstractInternalType internalType = type as AbstractInternalType; if (null != internalType) { return(_newAbstractClasses.Contains(internalType.TypeDefinition)); } return(false); }
void ResolveBaseTypes(Boo.Lang.List visited, TypeDefinition node) { // If type is generic, enter a special namespace to allow // correct resolution of generic parameters IType type = (IType)TypeSystemServices.GetEntity(node); if (type.GenericInfo != null) { EnterNamespace(new GenericParametersNamespaceExtender( type, NameResolutionService.CurrentNamespace)); } visited.Add(node); int removed = 0; int index = 0; foreach (SimpleTypeReference baseType in node.BaseTypes.ToArray()) { NameResolutionService.ResolveSimpleTypeReference(baseType); AbstractInternalType internalType = baseType.Entity as AbstractInternalType; if (null != internalType) { if (visited.Contains(internalType.TypeDefinition)) { Error(CompilerErrorFactory.InheritanceCycle(baseType, internalType.FullName)); node.BaseTypes.RemoveAt(index - removed); ++removed; } else { ResolveBaseTypes(visited, internalType.TypeDefinition); } } ++index; } // Leave special namespace if we entered it before if (type.GenericInfo != null) { LeaveNamespace(); } }