Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
 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);
     }
 }
Esempio n. 3
0
		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);
        }
Esempio n. 5
0
        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();
            }
        }