This commit is contained in:
Mikhalkovich Stanislav 2020-06-19 23:32:44 +03:00
parent 97a6a3d047
commit e7814c0f9f
5 changed files with 29 additions and 4 deletions

View 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.

View file

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

View file

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

View file

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

View file

@ -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=Модификаторы видимости недопустимы внутри интерфейса