This commit is contained in:
Бондарев Иван 2018-08-26 20:34:06 +02:00
parent 4c3ef12125
commit 50380adb2f
5 changed files with 18 additions and 0 deletions

View file

@ -0,0 +1,11 @@
procedure P<T>();
type
TRecord = record
end;
begin
end;
begin
end.

View file

@ -11351,6 +11351,10 @@ namespace PascalABCCompiler.TreeConverter
if (cl_def.keyword == SyntaxTree.class_keyword.Record)
{
string name = record_type_name = _type_declaration.type_name.name;
if (context.top_function != null && context.top_function.generic_params != null)
{
AddError(get_location(_type_declaration.type_name), "NESTED_RECORDS_IN_GENERIC_FUNCTIONS_NOT_ALLOWED");
}
record_is_generic = is_generic;
location loc = get_location(_type_declaration.type_name);
context.check_name_free(name, loc);

View file

@ -124,5 +124,6 @@ CONSTRUCTOR_CAN_NOT_BE_GENERIC=Constructor can not be generic
GENERIC_DELEGATE_INNER_FUNCTION=Generic delegate can not be defined inside a subroutine
GENERIC_NESTED_FUNCTIONS_NOT_ALLOWED=Nested generics are not allowed
NESTED_FUNCTIONS_IN_GENERIC_FUNCTIONS_NOT_ALLOWED=Nested subrotines inside generic subrotines are not allowed
NESTED_RECORDS_IN_GENERIC_FUNCTIONS_NOT_ALLOWED=Definition of record type inside generic subrotines is not allowed
GENERIC_TYPE_{0}_NEEDS_{1}_GENERIC_PARAMETERS=Generic type {0} needs {1} generic parameters
EXPRESSION_IS_NOT_ADDRESSED=This expression is not lvalue

View file

@ -114,6 +114,7 @@ CONSTRUCTOR_CAN_NOT_BE_GENERIC=Конструктор не может быть
GENERIC_DELEGATE_INNER_FUNCTION=Недопустимо описывать тип шаблонного делегата внутри подпрограммы
GENERIC_NESTED_FUNCTIONS_NOT_ALLOWED=Вложенные generic-подпрограммы запрещены
NESTED_FUNCTIONS_IN_GENERIC_FUNCTIONS_NOT_ALLOWED=Вложенные подпрограммы запрещены внутри generic-подпрограмм
NESTED_RECORDS_IN_GENERIC_FUNCTIONS_NOT_ALLOWED=Определение типа записи в generic-подпрограмме запрещено
GENERIC_TYPE_{0}_NEEDS_{1}_GENERIC_PARAMETERS=Количество шаблонных параметров типа {0} должно быть равно {1}
EXPRESSION_IS_NOT_ADDRESSED=Это выражение не может стоять в левой части оператора присваивания или передаваться как var-параметр в подпрограмму

View file

@ -114,6 +114,7 @@ CONSTRUCTOR_CAN_NOT_BE_GENERIC=Конструктор не може бути ш
GENERIC_DELEGATE_INNER_FUNCTION=Неприпустимо описувати тип шаблонного делегата всередині підпрограми
GENERIC_NESTED_FUNCTIONS_NOT_ALLOWED=Вкладені generic-підпрограми заборонені
NESTED_FUNCTIONS_IN_GENERIC_FUNCTIONS_NOT_ALLOWED=Вкладені підпрограми заборонені всередині generic-підпрограм
NESTED_RECORDS_IN_GENERIC_FUNCTIONS_NOT_ALLOWED=Определение типа записи в generic-подпрограмме запрещено
GENERIC_TYPE_{0}_NEEDS_{1}_GENERIC_PARAMETERS=Кількість шаблонних параметрів типу {0} має дорівнювати {1}
EXPRESSION_IS_NOT_ADDRESSED=Цей вираз не може стояти в лівій частині оператора присвоювання або передаватися як var-параметр в підпрограму