diff --git a/TestSuite/errors/err0270.pas b/TestSuite/errors/err0270.pas new file mode 100644 index 000000000..b84e5089b --- /dev/null +++ b/TestSuite/errors/err0270.pas @@ -0,0 +1,6 @@ +type + IInterface = abstract interface + 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 341573f67..d4c6079b7 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -3545,18 +3545,20 @@ namespace PascalABCCompiler.TreeConverter } if (_class_definition.attribute != class_attribute.None && _class_definition.body == null) - ErrorsList.Add(new SimpleSemanticError(get_location(_class_definition), "CLASS_ATTRIBUTE_NOT_ALLOWED_IN_CLASS_PREDEFINTIONS")); + AddError(new SimpleSemanticError(get_location(_class_definition), "CLASS_ATTRIBUTE_NOT_ALLOWED_IN_CLASS_PREDEFINTIONS")); if ((_class_definition.attribute & PascalABCCompiler.SyntaxTree.class_attribute.Sealed) == SyntaxTree.class_attribute.Sealed) { context.converted_type.SetIsSealed(true); if (_class_definition.keyword == SyntaxTree.class_keyword.Interface || _class_definition.keyword == SyntaxTree.class_keyword.TemplateInterface) - ErrorsList.Add(new SimpleSemanticError(get_location(_class_definition), "INTERFACE_CANNOT_BE_SEALED")); + AddError(new SimpleSemanticError(get_location(_class_definition), "INTERFACE_CANNOT_BE_SEALED")); } if ((_class_definition.attribute & PascalABCCompiler.SyntaxTree.class_attribute.Abstract) == SyntaxTree.class_attribute.Abstract && (_class_definition.attribute & PascalABCCompiler.SyntaxTree.class_attribute.Sealed) == SyntaxTree.class_attribute.Sealed) AddError(get_location(_class_definition), "ABSTRACT_CLASS_CANNOT_BE_SEALED"); if ((_class_definition.attribute & PascalABCCompiler.SyntaxTree.class_attribute.Abstract) == SyntaxTree.class_attribute.Abstract) { + if (_class_definition.keyword != SyntaxTree.class_keyword.Class) + AddError(get_location(_class_definition), "ATTRIBUTE_{0}_NOT_ALLOWED", "abstract"); context.converted_type.SetIsAbstract(true); } switch (_class_definition.keyword) diff --git a/bin/Lng/Eng/SemanticErrors_ib.dat b/bin/Lng/Eng/SemanticErrors_ib.dat index 35d0a6957..b52746542 100644 --- a/bin/Lng/Eng/SemanticErrors_ib.dat +++ b/bin/Lng/Eng/SemanticErrors_ib.dat @@ -145,6 +145,7 @@ ATTRIBUTE_CANNOT_BE_GENERIC=Attributes cannot be generic EXTERNAL_METHOD_CANNOT_BE_DECLARED_IN_GENERIC_TYPE=external-methods can not be declared in generic type EXTERNAL_METHOD_CANNOT_BE_GENERIC=external-methods can not be generic WHERE_SPECIFIER_MISMATCH=where specifier contradicts with where specifier of base class +ATTRIBUTE_{0}_NOT_ALLOWED=Attribute {0} is not allowed in this context %PREFIX%=COMPILATIONERROR_ UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Unit expected, library found ASSEMBLY_{0}_READING_ERROR=Error by reading assembly '{0}' diff --git a/bin/Lng/Rus/SemanticErrors_ib.dat b/bin/Lng/Rus/SemanticErrors_ib.dat index 2535966af..c5fb41545 100644 --- a/bin/Lng/Rus/SemanticErrors_ib.dat +++ b/bin/Lng/Rus/SemanticErrors_ib.dat @@ -140,6 +140,7 @@ ATTRIBUTE_CANNOT_BE_GENERIC=Атрибуты не могут быть генер EXTERNAL_METHOD_CANNOT_BE_DECLARED_IN_GENERIC_TYPE=external-методы нельзя описывать в генерик-классах EXTERNAL_METHOD_CANNOT_BE_GENERIC=external-методы не могут быть генериками WHERE_SPECIFIER_MISMATCH=Несоответствие спецификатора whеre спецификатору where базового класса +ATTRIBUTE_{0}_NOT_ALLOWED=Атрибут {0} недопустим в данном контексте %PREFIX%=COMPILATIONERROR_ UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Ожидался модуль, а встречена библиотека ASSEMBLY_{0}_READING_ERROR=Ошибка при чтении сборки '{0}' diff --git a/bin/Lng/Ukr/SemanticErrors_ib.dat b/bin/Lng/Ukr/SemanticErrors_ib.dat index 83167652c..92f5c69ea 100644 --- a/bin/Lng/Ukr/SemanticErrors_ib.dat +++ b/bin/Lng/Ukr/SemanticErrors_ib.dat @@ -138,6 +138,7 @@ ATTRIBUTE_CANNOT_BE_GENERIC=Атрибуты не могут быть генер EXTERNAL_METHOD_CANNOT_BE_DECLARED_IN_GENERIC_TYPE=external-методы нельзя описывать в генерик-классах EXTERNAL_METHOD_CANNOT_BE_GENERIC=external-методы не могут быть генериками WHERE_SPECIFIER_MISMATCH=Несоответствие спецификатора whеre спецификатору where базового классе​ +ATTRIBUTE_{0}_NOT_ALLOWED=Атрибут {0} недопустим в данном контексте %PREFIX%=COMPILATIONERROR_ UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Очікувався модуль, а зустріли бібліотеку ASSEMBLY_{0}_READING_ERROR=Помилка при читанні збірки '{0}'