diff --git a/TestSuite/errors/err0338_nested_external_function.pas b/TestSuite/errors/err0338_nested_external_function.pas new file mode 100644 index 000000000..be0f27afd --- /dev/null +++ b/TestSuite/errors/err0338_nested_external_function.pas @@ -0,0 +1,10 @@ +procedure p1; + function GetDC(hwnd: System.IntPtr): System.IntPtr; + external 'user32.dll'; +begin + GetDC(System.IntPtr.Zero); +end; + +begin + p1; +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 7a3c4183b..e5bc15cfa 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -17317,6 +17317,8 @@ namespace PascalABCCompiler.TreeConverter { string module_name = ""; string name = ""; + if (context.converted_func_stack.size > 1) + AddError(context.top_function.loc, "EXTERNAL_METHOD_CANNOT_BE_NESTED"); 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) diff --git a/bin/Lng/Eng/SemanticErrors_ib.dat b/bin/Lng/Eng/SemanticErrors_ib.dat index 9e4327f80..2852f4c3e 100644 --- a/bin/Lng/Eng/SemanticErrors_ib.dat +++ b/bin/Lng/Eng/SemanticErrors_ib.dat @@ -162,6 +162,7 @@ USING_{0}_NOT_ALLOWED_IN_THIS_CONTEXT=Using of {0} is not allowed in this contex OPERATORS_IN_INTERFACES_NOT_ALLOWED=Interfaces can not contain operators STATIC_CLASS_CAN_NOT_BE_USED_AS_PARENT_SPECIFICATOR=Static classes can not be used as generic constraints ENUM_MUST_HAVE_SEQUENCED_VALUES=Enum must have sequenced values +EXTERNAL_METHOD_CANNOT_BE_NESTED=Nested functions cannot be external %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 e113920a8..02b7c7a21 100644 --- a/bin/Lng/Rus/SemanticErrors_ib.dat +++ b/bin/Lng/Rus/SemanticErrors_ib.dat @@ -157,6 +157,7 @@ USING_{0}_NOT_ALLOWED_IN_THIS_CONTEXT=Использование {0} недоп OPERATORS_IN_INTERFACES_NOT_ALLOWED=Интерфейсы не могут содержать операторы STATIC_CLASS_CAN_NOT_BE_USED_AS_PARENT_SPECIFICATOR=Нельзя использовать статические классы в качестве ограничений ENUM_MUST_HAVE_SEQUENCED_VALUES=Нельзя использовать пронумерованные перечисления в качестве индексатора массива +EXTERNAL_METHOD_CANNOT_BE_NESTED=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 af40212fc..d6c240749 100644 --- a/bin/Lng/Ukr/SemanticErrors_ib.dat +++ b/bin/Lng/Ukr/SemanticErrors_ib.dat @@ -154,6 +154,7 @@ USING_{0}_NOT_ALLOWED_IN_THIS_CONTEXT=Использование {0} недоп OPERATORS_IN_INTERFACES_NOT_ALLOWED=Интерфейсы не могут содержать операторы STATIC_CLASS_CAN_NOT_BE_USED_AS_PARENT_SPECIFICATOR=Нельзя использовать статические классы в качестве ограничений ENUM_MUST_HAVE_SEQUENCED_VALUES=Нельзя использовать пронумерованные перечисления в качестве индексатора массива +EXTERNAL_METHOD_CANNOT_BE_NESTED=external-подпрограммы не могут вложенными %PREFIX%=COMPILATIONERROR_ UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Очікувався модуль, а зустріли бібліотеку ASSEMBLY_{0}_READING_ERROR=Помилка при читанні збірки '{0}'