diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs index e52d04b13..cbbd330d8 100644 --- a/TreeConverter/TreeRealization/generics.cs +++ b/TreeConverter/TreeRealization/generics.cs @@ -180,7 +180,11 @@ namespace PascalABCCompiler.TreeRealization return new SimpleSemanticError(null, "USING_STATIC_CLASS_NOT_VALID"); if (gpe.has_default_ctor) { - if (tn.IsAbstract || tn.IsStatic || !tn.is_value && !generic_convertions.type_has_default_ctor(tn, false)) + if (tn.IsAbstract) + { + return new SimpleSemanticError(null, "PARAMETER_{0}_MUST_NOT_BE_ABSTRACT", tn.PrintableName); + } + if (tn.IsStatic || !tn.is_value && !generic_convertions.type_has_default_ctor(tn, false)) { return new SimpleSemanticError(null, "PARAMETER_{0}_MUST_HAVE_DEFAULT_CONSTRUCTOR", tn.PrintableName); } diff --git a/bin/Lng/Eng/SemanticErrors_ssyy.dat b/bin/Lng/Eng/SemanticErrors_ssyy.dat index 19c8811cb..5362f4414 100644 --- a/bin/Lng/Eng/SemanticErrors_ssyy.dat +++ b/bin/Lng/Eng/SemanticErrors_ssyy.dat @@ -33,6 +33,7 @@ DESTRUCTOR_IN_INTERFACE=Interfaces cannot contain destructors CAN_NOT_CALL_CONSTRUCTOR_AS_PROCEDURE=Cannot call constructor as a procedure CANNOT_USE_POINTER_AS_GENERIC_ARGUMENT=Cannot use pointer type as generic argument PARAMETER_{0}_MUST_HAVE_DEFAULT_CONSTRUCTOR='{0}' must have public default constructor +PARAMETER_{0}_MUST_NOT_BE_ABSTRACT=Type {0} cannot be abstract PARAMETER_{0}_MUST_BE_REFERENCE_TYPE='{0}' must be reference type PARAMETER_{0}_MUST_BE_VALUE_TYPE='{0}' must be value type PARAMETER_{0}_MUST_BE_DERIVED_FROM_{1}=The type '{0}' cannot be used as type parameter, because there is no implicit reference conversion from '{0}' to '{1}' diff --git a/bin/Lng/Rus/SemanticErrors_ssyy.dat b/bin/Lng/Rus/SemanticErrors_ssyy.dat index 3aac83407..7e8c9f9c4 100644 --- a/bin/Lng/Rus/SemanticErrors_ssyy.dat +++ b/bin/Lng/Rus/SemanticErrors_ssyy.dat @@ -32,6 +32,7 @@ ASSIGN_TO_EVENT=Оператор := не применим к событиям; DESTRUCTOR_IN_INTERFACE=Деструкторы не могут присутствовать в интерфейсе CAN_NOT_CALL_CONSTRUCTOR_AS_PROCEDURE=Нельзя вызвать конструктор через объект CANNOT_USE_POINTER_AS_GENERIC_ARGUMENT=Тип-указатель не может выступать в качестве параметра обобщения +PARAMETER_{0}_MUST_NOT_BE_ABSTRACT=Невозможно инстанцировать, так как тип {0} не должен быть абстрактным PARAMETER_{0}_MUST_HAVE_DEFAULT_CONSTRUCTOR=Невозможно инстанцировать, так как у типа {0} нет конструктора без параметров с уровнем доступа public PARAMETER_{0}_MUST_BE_REFERENCE_TYPE=Невозможно инстанцировать, так как тип {0} не является ссылочным (классом) PARAMETER_{0}_MUST_BE_VALUE_TYPE=Невозможно инстанцировать, так как тип {0} не является размерным