fix #2254
This commit is contained in:
parent
97a6a3d047
commit
e7814c0f9f
20
TestSuite/errors/err0370_where_override.pas
Normal file
20
TestSuite/errors/err0370_where_override.pas
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
type
|
||||
t1 = class
|
||||
procedure p1<TTT>; virtual;
|
||||
where TTT: constructor;
|
||||
begin
|
||||
end;
|
||||
end;
|
||||
|
||||
t2 = class(t1)
|
||||
procedure p1<T>; override;
|
||||
where T: record, constructor;
|
||||
begin
|
||||
//Assert(typeof(T).IsValueType);
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
var a: t1 := new t2;
|
||||
a.p1&<object>;
|
||||
end.
|
||||
|
|
@ -13775,7 +13775,9 @@ namespace PascalABCCompiler.TreeConverter
|
|||
cmn.polymorphic_state = SemanticTree.polymorphic_state.ps_virtual_abstract;
|
||||
|
||||
}
|
||||
|
||||
if (is_override && _procedure_attributes_list.Parent is procedure_header ph && ph.where_defs != null)
|
||||
AddError(cmn.loc, "OVERRIDE_METHODS_CANNOT_CONTAIN_WHERE_SECTION");
|
||||
|
||||
if (cmn.field_access_level < cmn.overrided_method.field_access_level)
|
||||
AddError(cmn.loc, "CAN_NOT_BE_DOWN_ACCESS_LEVEL_FOR_METH");
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -36,4 +36,6 @@ LAMBDAS_IN_CONSTRUCTOR_PARAMETERS_ARE_FORBIDDEN_IN_THIS_CONTEXT=Lambda-expressio
|
|||
PROCEDURE_TYPE_SHOULD_BE_REPLACED_BY_TYPE_NAME_IN_THIS_CONTEXT=Procedure type should be replaced by type name in this context
|
||||
ACCESS_TO_ENUM_CONST_THROUGH_OBJECT=Enum constant can not be accessed through an object
|
||||
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
|
||||
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
|
||||
|
|
|
|||
|
|
@ -37,4 +37,5 @@ LAMBDAS_IN_CONSTRUCTOR_PARAMETERS_ARE_FORBIDDEN_IN_THIS_CONTEXT=Лямбда-в
|
|||
PROCEDURE_TYPE_SHOULD_BE_REPLACED_BY_TYPE_NAME_IN_THIS_CONTEXT=Процедурный тип следует заменить именем типа в данном контексте
|
||||
ACCESS_TO_ENUM_CONST_THROUGH_OBJECT=Нельзя обратиться к элементу перечисления через объект
|
||||
ONE_DIM_ARRAY_OR_LIST_EXPECTED=Ожидался одномерный массив или список
|
||||
TUPLE_TYPE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Количество элементов в типе кортежа не должно быть больше 7
|
||||
TUPLE_TYPE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Количество элементов в типе кортежа не должно быть больше 7
|
||||
OVERRIDE_METHODS_CANNOT_CONTAIN_WHERE_SECTION=Методы с модификатором override не могут содержать собственную секцию where
|
||||
|
|
@ -12,7 +12,7 @@ CONSTRUCTOR_IN_INTERFACE=Интерфейс не может содержать
|
|||
INTERFACE_{0}_CONSTRUCTOR_CALL={0} является интерфейсом, невозможно создать его экземпляр
|
||||
CLASS_{0}_DOES_NOT_IMPLEMENT_MEMBER_{2}_OF_INTERFACE_{1}=Класс {0} не реализует метод {2} интерфейса {1}
|
||||
MEMBER_{2}_OF_CLASS_{0}_FROM_INTERFACE_{1}_MUST_BE_PUBLIC_AND_NON_STATIC=Функция класса {0}, реализующая метод {2} интерфейса {1}, должна быть нестатической с уровнем доступа public
|
||||
ATTRIBUTES_IN_INTERFACE_MEMBER=Данный аттрибуты недопустим в интерфейсе
|
||||
ATTRIBUTES_IN_INTERFACE_MEMBER=Данный атрибут недопустим в интерфейсе
|
||||
MODIFER_BLOCK_{0}_CALL=Член {0} закрыт своим модификатором видимости
|
||||
LEFT_RANGE_GREATER_THEN_RIGHT=Нижняя граница превосходит верхнюю
|
||||
ACCESS_MODIFER_IN_INTERFACE=Модификаторы видимости недопустимы внутри интерфейса
|
||||
|
|
|
|||
Loading…
Reference in a new issue