This commit is contained in:
Mikhalkovich Stanislav 2020-06-24 10:21:01 +03:00
parent 4a08774174
commit 15ebf4a4e4
4 changed files with 26 additions and 2 deletions

View file

@ -0,0 +1,13 @@
// #2266
type
T1 = class;
{T2 = class
tt: T1;
end;}
T1 = static class
//public static a: integer;
end;
begin
end.

View file

@ -11536,6 +11536,15 @@ namespace PascalABCCompiler.TreeConverter
//bool is_template_synonym = false;
//SyntaxTree.array_type at=_type_declaration.type_def as SyntaxTree.array_type;
if (_type_declaration.type_def is class_definition cd && cd.keyword == class_keyword.Class &&
(cd.attribute & SyntaxTree.class_attribute.Static) == SyntaxTree.class_attribute.Static)
{
var name = _type_declaration.type_name.name.ToLower();
if(context.types_predefined.Select(tn => tn.name.ToLower()).Contains(name))
AddError(get_location(_type_declaration), "STATIC_CLASS_CANNOT_HAVE_PREDEFINITION"); // #2266
}
template_class tc = null;
SyntaxTree.template_type_name ttn = _type_declaration.type_name as SyntaxTree.template_type_name;
SyntaxTree.class_definition cl_def = _type_declaration.type_def as SyntaxTree.class_definition;

View file

@ -39,4 +39,5 @@ ONE_DIM_ARRAY_OR_LIST_EXPECTED=One-dimensional array or list expected
TUPLE_TYPE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Number of elements in tuple type must be less than 8
OVERRIDE_METHODS_CANNOT_CONTAIN_WHERE_SECTION=Methods with override modifier can't contain where section
Ìåòîäû ñ ìîäèôèêàòîðîì override íå ìîãóò ñîäåðæàòü ñîáñòâåííóþ ñåêöèþ where
EXPLICIT_CASTS_FOR_LAMBDA_EXPRESSIONS_ARE_FORBIDDEN=Explicit type casts for lambda expressions are forbidden
EXPLICIT_CASTS_FOR_LAMBDA_EXPRESSIONS_ARE_FORBIDDEN=Explicit type casts for lambda expressions are forbidden
STATIC_CLASS_CANNOT_HAVE_PREDEFINITION=Static class cannot be predefined

View file

@ -39,4 +39,5 @@ ACCESS_TO_ENUM_CONST_THROUGH_OBJECT=Нельзя обратиться к эле
ONE_DIM_ARRAY_OR_LIST_EXPECTED=Ожидался одномерный массив или список
TUPLE_TYPE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Количество элементов в типе кортежа не должно быть больше 7
OVERRIDE_METHODS_CANNOT_CONTAIN_WHERE_SECTION=Методы с модификатором override не могут содержать собственную секцию where
EXPLICIT_CASTS_FOR_LAMBDA_EXPRESSIONS_ARE_FORBIDDEN=Явные приведения типов для лямбда-выражений запрещены
EXPLICIT_CASTS_FOR_LAMBDA_EXPRESSIONS_ARE_FORBIDDEN=Явные приведения типов для лямбда-выражений запрещены
STATIC_CLASS_CANNOT_HAVE_PREDEFINITION=Статический класс не может иметь предописание