From 50380adb2f0d7089a76245d34a0531d7386022ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Sun, 26 Aug 2018 20:34:06 +0200 Subject: [PATCH] fix #1071 --- TestSuite/errors/err0258.pas | 11 +++++++++++ TreeConverter/TreeConversion/syntax_tree_visitor.cs | 4 ++++ bin/Lng/Eng/SemanticErrors_ssyy.dat | 1 + bin/Lng/Rus/SemanticErrors_ssyy.dat | 1 + bin/Lng/Ukr/SemanticErrors_ssyy.dat | 1 + 5 files changed, 18 insertions(+) create mode 100644 TestSuite/errors/err0258.pas diff --git a/TestSuite/errors/err0258.pas b/TestSuite/errors/err0258.pas new file mode 100644 index 000000000..25be09b0a --- /dev/null +++ b/TestSuite/errors/err0258.pas @@ -0,0 +1,11 @@ +procedure P(); + + type + TRecord = record + end; + +begin +end; + +begin +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 3b2dac4c7..da21abbeb 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -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); diff --git a/bin/Lng/Eng/SemanticErrors_ssyy.dat b/bin/Lng/Eng/SemanticErrors_ssyy.dat index a115367b7..741572383 100644 --- a/bin/Lng/Eng/SemanticErrors_ssyy.dat +++ b/bin/Lng/Eng/SemanticErrors_ssyy.dat @@ -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 diff --git a/bin/Lng/Rus/SemanticErrors_ssyy.dat b/bin/Lng/Rus/SemanticErrors_ssyy.dat index f085a4897..7aa7135fc 100644 --- a/bin/Lng/Rus/SemanticErrors_ssyy.dat +++ b/bin/Lng/Rus/SemanticErrors_ssyy.dat @@ -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-параметр в подпрограмму diff --git a/bin/Lng/Ukr/SemanticErrors_ssyy.dat b/bin/Lng/Ukr/SemanticErrors_ssyy.dat index fec9569f2..f68268728 100644 --- a/bin/Lng/Ukr/SemanticErrors_ssyy.dat +++ b/bin/Lng/Ukr/SemanticErrors_ssyy.dat @@ -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-параметр в підпрограму