From acfab8fcf6d7b638bffffc6c72e479834f35129a 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, 10 Mar 2019 12:31:05 +0100 Subject: [PATCH] fix #1800 --- TestSuite/errors/err0311.pas | 7 +++++++ TreeConverter/TreeConversion/syntax_tree_visitor.cs | 5 +++++ bin/Lng/Rus/SemanticErrors_ssyy.dat | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 TestSuite/errors/err0311.pas diff --git a/TestSuite/errors/err0311.pas b/TestSuite/errors/err0311.pas new file mode 100644 index 000000000..73a823113 --- /dev/null +++ b/TestSuite/errors/err0311.pas @@ -0,0 +1,7 @@ +type + I0 = interface + const x = 5; + 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 fb748cd55..2a991926d 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -11096,6 +11096,11 @@ namespace PascalABCCompiler.TreeConverter public override void visit(SyntaxTree.simple_const_definition _simple_const_definition) { + if (context.converting_block() == block_type.type_block && + context.converted_type.IsInterface) + { + AddError(get_location(_simple_const_definition), "INVALID_INTERFACE_MEMBER"); + } constant_definition_node cdn = context.add_const_definition(_simple_const_definition.const_name.name, get_location(_simple_const_definition.const_name)); cdn.const_value = convert_strong_to_constant_node(_simple_const_definition.const_value); cdn.const_value.SetType(DeduceType(cdn.const_value.type, cdn.const_value.location)); diff --git a/bin/Lng/Rus/SemanticErrors_ssyy.dat b/bin/Lng/Rus/SemanticErrors_ssyy.dat index e9cc63592..c0a4efe81 100644 --- a/bin/Lng/Rus/SemanticErrors_ssyy.dat +++ b/bin/Lng/Rus/SemanticErrors_ssyy.dat @@ -4,7 +4,7 @@ TEMPLATE_ARGUMENTS_COUNT_MISMATCH=Неправильное число парам TEMPLATE_PARAMETER_{0}_REDEFINITION=Повторное описание параметра {0} INHERITED_CONSTRUCTOR_CALL_MUST_BE_FIRST=Вызов конструктора предка должен быть первым в теле конструктора INHERITED_CONSTRUCTOR_CALL_EXPECTED=Необходимо вызвать конструктор предка -INVALID_INTERFACE_MEMBER=Члены интерфейса не могут иметь определение +INVALID_INTERFACE_MEMBER=Члены интерфейса не могут иметь поля, константы и реализацию методов {0}_IS_NOT_INTERFACE={0} не является интерфейсом INTERFACE_FUNCTION_WITH_BODY=Нельзя определять тело функции или процедуры интерфейса CONSTRUCTOR_IN_INTERFACE=Интерфейс не может содержать конструкторы