This commit is contained in:
Mikhalkovich Stanislav 2020-07-09 21:36:29 +03:00
parent 6a2f92afcc
commit bc12063981
3 changed files with 7 additions and 1 deletions

View file

@ -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);
}

View file

@ -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}'

View file

@ -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} не является размерным