some semantic checks for explicit implemented properties

This commit is contained in:
Ivan Bondarev 2021-03-28 14:52:18 +02:00
parent 08b67078ec
commit b1adbc3933
4 changed files with 12 additions and 4 deletions

View file

@ -4275,9 +4275,14 @@ namespace PascalABCCompiler.TreeConverter
List<SymbolInfo> sil = context.find_definition_node(ntr, get_location(_simple_property.property_name), true);
if (!(sil[0].sym_info as type_node).IsInterface)
AddError(get_location(_simple_property.property_name), "INTERFACE_AWAITED");
AddError(get_location(_simple_property.property_name), "EXPECTED_INTERFACE");
name = (sil[0].sym_info as type_node).BaseFullName + "." + name;
expl_interface = sil[0].sym_info as type_node;
sil = expl_interface.find_in_type(_simple_property.property_name.name);
if (sil == null)
AddError(new MemberIsNotDeclaredInType(_simple_property.property_name, get_location(_simple_property.property_name), expl_interface));
if (!(sil[0].sym_info is property_node))
AddError(get_location(_simple_property.property_name), "EXPECTED_PROPERTY");
}
common_property_node pn = context.add_property(name, get_location(_simple_property.property_name));
assign_doc_info(pn, _simple_property);

View file

@ -169,7 +169,8 @@ PARTIAL_CLASS_PARENTS_MISMATCH=Partial declarations must not specify different b
PARAMETER_{0}_HAS_TYPE_{1}_FROM_UNIT_{2}=Parameter {0} has type {1} from unit {2}. Add unit {2} to uses section.
PARTIAL_CLASS_PREDEFINITION_NOT_ALLOWED=Predefinitions of partial classes are not allowed
AMBIGUOUS_DELEGATES=Ambiguous delegates detected
INTERFACE_AWAITED=Interface expected
EXPECTED_INTERFACE=Interface expected
EXPECTED_PROPERTY=Property expected
%PREFIX%=COMPILATIONERROR_
UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Unit expected, library found
ASSEMBLY_{0}_READING_ERROR=Error by reading assembly '{0}'

View file

@ -164,7 +164,8 @@ PARTIAL_CLASS_PARENTS_MISMATCH=partial-класс не может иметь и
PARAMETER_{0}_HAS_TYPE_{1}_FROM_UNIT_{2}=Параметр {0} имеет тип {1} из неподключенного модуля {2}. Добавьте модуль {2} в секцию uses.
PARTIAL_CLASS_PREDEFINITION_NOT_ALLOWED=Предописания partial-классов недопустимы
AMBIGUOUS_DELEGATES=Невозможно выбрать конкретный делегат из перегруженных
INTERFACE_AWAITED=Ожидалось имя интерфейса
EXPECTED_INTERFACE=Ожидалось имя интерфейса
EXPECTED_PROPERTY=Ожидалось свойство
%PREFIX%=COMPILATIONERROR_
UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Ожидался модуль, а встречена библиотека
ASSEMBLY_{0}_READING_ERROR=Ошибка при чтении сборки '{0}'

View file

@ -161,7 +161,8 @@ PARTIAL_CLASS_PARENTS_MISMATCH=partial-класс не может иметь и
PARAMETER_{0}_HAS_TYPE_{1}_FROM_UNIT_{2}=Параметр {0} имеет тип {1} из неподключенного модуля {2}. Добавьте модуль {2} в секцию uses.
PARTIAL_CLASS_PREDEFINITION_NOT_ALLOWED=Предописания partial-классов недопустимы#
AMBIGUOUS_DELEGATES=Невозможно выбрать конкретный делегат из перегруженных
INTERFACE_AWAITED=Ожидалось имя интерфейса
EXPECTED_INTERFACE=Ожидалось имя интерфейса
EXPECTED_PROPERTY=Ожидалось свойство
%PREFIX%=COMPILATIONERROR_
UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Очікувався модуль, а зустріли бібліотеку
ASSEMBLY_{0}_READING_ERROR=Помилка при читанні збірки '{0}'