fix #2266
This commit is contained in:
parent
4a08774174
commit
15ebf4a4e4
13
TestSuite/errors/err0371_static_predefinition.pas
Normal file
13
TestSuite/errors/err0371_static_predefinition.pas
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
// #2266
|
||||
type
|
||||
T1 = class;
|
||||
|
||||
{T2 = class
|
||||
tt: T1;
|
||||
end;}
|
||||
|
||||
T1 = static class
|
||||
//public static a: integer;
|
||||
end;
|
||||
begin
|
||||
end.
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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=Статический класс не может иметь предописание
|
||||
Loading…
Reference in a new issue