This commit is contained in:
Бондарев Иван 2016-07-09 15:01:56 +02:00
parent ae31782585
commit d2cfb2edaa
3 changed files with 11 additions and 1 deletions

View file

@ -12110,7 +12110,7 @@ namespace PascalABCCompiler.TreeConverter
}
context.top_function.is_overload = true; // SSM 12/08/15
context.last_created_function.symbol_kind = symbol_kind.sk_overload_function;
bool is_forward = false;
for (int i = 0; i < _procedure_attributes_list.proc_attributes.Count; i++)
{
convertion_data_and_alghoritms.check_node_parser_error(_procedure_attributes_list.proc_attributes[i]);
@ -12138,7 +12138,13 @@ namespace PascalABCCompiler.TreeConverter
{
AddError(get_location(_procedure_attributes_list.proc_attributes[i]), "ATTRIBUTES_IN_INTERFACE_MEMBER");
}
common_namespace_function_node top_function = context.top_function as common_namespace_function_node;
if (top_function != null && top_function.ConnectedToType != null)
{
AddError(get_location(_procedure_attributes_list.proc_attributes[i]), "FORWARD_EXTENSION_METHODS_NOT_ALLOWED");
}
is_forward = true;
break;
}
case SyntaxTree.proc_attribute.attr_virtual:
@ -12288,6 +12294,8 @@ namespace PascalABCCompiler.TreeConverter
}
case proc_attribute.attr_extension:
{
if (is_forward)
AddError(get_location(_procedure_attributes_list), "EXTENSIONMETHOD_KEYWORD_NOT_ALLOWED");
if (context.converted_compiled_type != null)
AddError(get_location(_procedure_attributes_list), "EXTENSIONMETHOD_KEYWORD_NOT_ALLOWED");
if (in_interface_part)

View file

@ -120,6 +120,7 @@ INTERFACE_EXPECTED=Interface expected
IMPLICIT_EXPLICIT_OPERATOR_EXTENSION_ONLY_FOR_COMPILED_CLASSES_ALLOWED=Operators implicit and explicit can be extended only for classes from another .NET assemblies
EXTENSIONMETHOD_KEYWORD_NOT_ALLOWED=extensionmethod is not allowed in this context
CANNOT_EXTEND_STANDARD_OPERATORS_FOR_DELEGATE=Can not extend operators +,+=,-,-= for delegates
FORWARD_EXTENSION_METHODS_NOT_ALLOWED=forward attribute can not be applied to extension methods
%PREFIX%=COMPILATIONERROR_
UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Unit expected, library found
ASSEMBLY_{0}_READING_ERROR=Error by reading assembly '{0}'

View file

@ -115,6 +115,7 @@ INTERFACE_EXPECTED=Ожидался интерфейс
IMPLICIT_EXPLICIT_OPERATOR_EXTENSION_ONLY_FOR_COMPILED_CLASSES_ALLOWED=extension-операторы преобразования типов допустимы только для классов из других сборок .NET
EXTENSIONMETHOD_KEYWORD_NOT_ALLOWED=Атрибут extensionmethod недопустим в данном контексте
CANNOT_EXTEND_STANDARD_OPERATORS_FOR_DELEGATE=Нельзя раширять операции +,+=,-,-= для делегатов
FORWARD_EXTENSION_METHODS_NOT_ALLOWED=Атрибут forward недопустим для методов расширения
%PREFIX%=COMPILATIONERROR_
UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Ожидался модуль, а встречена библиотека
ASSEMBLY_{0}_READING_ERROR=Ошибка при чтении сборки '{0}'