diff --git a/TestSuite/errors/err0261.pas b/TestSuite/errors/err0261.pas new file mode 100644 index 000000000..a71f98cd7 --- /dev/null +++ b/TestSuite/errors/err0261.pas @@ -0,0 +1,11 @@ +type + t1=class + + private class function MessageBox(wnd: System.IntPtr; message, caption: string; flags: cardinal):integer; + external 'User32.dll'; + + end; + +begin + var a := new t1; +end. \ No newline at end of file diff --git a/TestSuite/errors/err0262.pas b/TestSuite/errors/err0262.pas new file mode 100644 index 000000000..442680f84 --- /dev/null +++ b/TestSuite/errors/err0262.pas @@ -0,0 +1,11 @@ +type + t1=class + + private class function MessageBox(wnd: System.IntPtr; message, caption: string; flags: cardinal):integer; + external 'User32.dll'; + + 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 7b5915e08..706fde6d7 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -16789,6 +16789,11 @@ namespace PascalABCCompiler.TreeConverter string name = ""; if (context.converted_func_stack.top() is common_method_node && (context.converted_func_stack.top() as common_method_node).polymorphic_state != SemanticTree.polymorphic_state.ps_static) AddError(context.top_function.loc, "EXTERNAL_METHOD_SHOULD_BE_STATIC"); + if (context.converted_func_stack.top().is_generic_function) + AddError(context.top_function.loc, "EXTERNAL_METHOD_CANNOT_BE_GENERIC"); + if (context.converted_func_stack.top() is common_method_node && (context.converted_func_stack.top() as common_method_node).common_comprehensive_type.is_generic_type_definition) + AddError(context.top_function.loc, "EXTERNAL_METHOD_CANNOT_BE_DECLARED_IN_GENERIC_TYPE"); + if (_external_directive.modulename == null) { if (!has_dll_import_attribute(context.top_function)) diff --git a/bin/Lng/Eng/SemanticErrors_ib.dat b/bin/Lng/Eng/SemanticErrors_ib.dat index 4984be1c6..778605fd6 100644 --- a/bin/Lng/Eng/SemanticErrors_ib.dat +++ b/bin/Lng/Eng/SemanticErrors_ib.dat @@ -142,6 +142,8 @@ EXPRESSION_EXPECTED=Expression expected CLASS_ATTRIBUTE_NOT_ALLOWED_IN_CLASS_PREDEFINTIONS=Can not declare class attributes in class predefintions GENERIC_RECORDS_CANNOT_HAVE_EXPLICIT_LAYOUT=Generic-records can not have attribute LayoutKind.&Explicit 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 %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 7dc8bb9ff..fd0230fbf 100644 --- a/bin/Lng/Rus/SemanticErrors_ib.dat +++ b/bin/Lng/Rus/SemanticErrors_ib.dat @@ -137,6 +137,8 @@ EXPRESSION_EXPECTED=Ожидалось выражение CLASS_ATTRIBUTE_NOT_ALLOWED_IN_CLASS_PREDEFINTIONS=Недопустимо определять атрибуты класса в его предописании GENERIC_RECORDS_CANNOT_HAVE_EXPLICIT_LAYOUT=Генерик-записи не могут иметь атрибут LayoutKind.&Explicit ATTRIBUTE_CANNOT_BE_GENERIC=Атрибуты не могут быть генерик-классами +EXTERNAL_METHOD_CANNOT_BE_DECLARED_IN_GENERIC_TYPE=external-методы нельзя описывать в генерик-классах +EXTERNAL_METHOD_CANNOT_BE_GENERIC=external-методы не могут быть генериками %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 3f1f6fcf3..6f03d9f0a 100644 --- a/bin/Lng/Ukr/SemanticErrors_ib.dat +++ b/bin/Lng/Ukr/SemanticErrors_ib.dat @@ -135,6 +135,8 @@ EXPRESSION_EXPECTED=Ожидалось выражение CLASS_ATTRIBUTE_NOT_ALLOWED_IN_CLASS_PREDEFINTIONS=Недопустимо определять атрибуты класса в его предописании GENERIC_RECORDS_CANNOT_HAVE_EXPLICIT_LAYOUT=Генерик-записи не могут иметь атрибут LayoutKind.&Explicit ATTRIBUTE_CANNOT_BE_GENERIC=Атрибуты не могут быть генерик-классами +EXTERNAL_METHOD_CANNOT_BE_DECLARED_IN_GENERIC_TYPE=external-методы нельзя описывать в генерик-классах +EXTERNAL_METHOD_CANNOT_BE_GENERIC=external-методы не могут быть генериками %PREFIX%=COMPILATIONERROR_ UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Очікувався модуль, а зустріли бібліотеку ASSEMBLY_{0}_READING_ERROR=Помилка при читанні збірки '{0}'