コード例 #1
0
        void CheckBaseTypes(ClassDefinition node)
        {
            IType baseClass = null;

            foreach (TypeReference baseTypeRef in node.BaseTypes)
            {
                IType baseType = GetType(baseTypeRef);
                if (baseType.IsInterface)
                {
                    continue;
                }

                if (null != baseClass)
                {
                    Error(CompilerErrorFactory.ClassAlreadyHasBaseType(baseTypeRef, node.Name, baseClass));
                    continue;
                }

                baseClass = baseType;
                if (baseClass.IsFinal && !TypeSystemServices.IsError(baseClass))
                {
                    Error(CompilerErrorFactory.CannotExtendFinalType(baseTypeRef, baseClass));
                }
            }

            if (null == baseClass)
            {
                node.BaseTypes.Insert(0, CodeBuilder.CreateTypeReference(TypeSystemServices.ObjectType));
            }
        }