diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 2e8e4f9f0..f39f66c68 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "4"; public const string Build = "2"; - public const string Revision = "1791"; + public const string Revision = "1792"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index e46485d88..b4e6312e0 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=2 -%REVISION%=1791 %MINOR%=4 +%REVISION%=1792 +%COREVERSION%=2 %MAJOR%=3 diff --git a/Localization/DefaultLang.resources b/Localization/DefaultLang.resources index fd5580a9d..bfda5f854 100644 Binary files a/Localization/DefaultLang.resources and b/Localization/DefaultLang.resources differ diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index e295a5537..9fbe070c5 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.4.2.1791' +!define VERSION '3.4.2.1792' diff --git a/SyntaxTree/tree/NodesBuilder.cs b/SyntaxTree/tree/NodesBuilder.cs index 4e0db342b..8a98f38fe 100644 --- a/SyntaxTree/tree/NodesBuilder.cs +++ b/SyntaxTree/tree/NodesBuilder.cs @@ -82,7 +82,8 @@ namespace PascalABCCompiler.SyntaxTree fp = null; var sl = SyntaxTreeBuilder.BuildSimpleAssignList(fields, formal_names); - return new procedure_definition(new constructor(fp), new block(sl)); + var c = new constructor(fp); + return new procedure_definition(c, new block(sl)); } public static procedure_definition BuildSimpleDeConstruct(List fields, List formal_names, List types) @@ -232,7 +233,8 @@ namespace PascalABCCompiler.SyntaxTree if (!HasToString) { var tostr = BuildToStringFuncForAutoClass(names); - cb.Add(BuildOneMemberSection(tostr)); + var cm = BuildOneMemberSection(tostr); + cb.Add(cm); //cb.class_def_blocks.Insert(0, BuildOneMemberSection(tostr)); } } diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 2dd89753b..0d3393b16 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -3670,9 +3670,22 @@ namespace PascalABCCompiler.TreeConverter } SyntaxTreeBuilder.AddMembersForAutoClass(_class_definition,ref names,ref types); + // Отдельный цикл по синт поддереву для вылавливания events + foreach (var l in _class_definition.body.class_def_blocks) + { + foreach (var m in l.members) + { + var mm = m as var_def_statement; + if (mm != null && mm.is_event) + AddError(get_location(mm), "AUTO_CLASS_MUST_NOT_HAVE_EVENTS"); + } + } + for (var i = 0; i < types.Count; i++) { - type_node tn = convert_strong(types[i]); + type_node tn = convert_strong(types[i]); + if (tn.IsEnum && types[i] is enum_type_definition) + AddError(get_location(types[i]), "AUTO_CLASS_MUST_NOT_HAVE_UNNAMED_ENUMS"); if (tn.IsPointer) AddError(get_location(types[i]), "AUTO_CLASS_MUST_NOT_HAVE_POINTERS"); } diff --git a/bin/Lng/Rus/SemanticErrors_ms.dat b/bin/Lng/Rus/SemanticErrors_ms.dat index 3d2710060..9402d37af 100644 --- a/bin/Lng/Rus/SemanticErrors_ms.dat +++ b/bin/Lng/Rus/SemanticErrors_ms.dat @@ -10,4 +10,5 @@ ONLY_IN_SHORT_FUNC_DEFS_RETURN_TYPE_CANBE_OMITTED=Только в коротки ONE_TKIDENTIFIER=В качестве типа ожидался идентификатор SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR=Сахарный узел {0} не должен обходиться в syntax_tree_visitor. Обратитесь к разработчикам PascalABC.NET MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}=Отсутствует семантическая проверка для сахарного узла {0} -OPERATOR_DQ_MUST_BE_USED_WITH_A_REFERENCE_TYPE_VALUETYPE=Левый операнд операции ?. должен иметь ссылочный тип \ No newline at end of file +OPERATOR_DQ_MUST_BE_USED_WITH_A_REFERENCE_TYPE_VALUETYPE=Левый операнд операции ?. должен иметь ссылочный тип +AUTOCLASS_MUST_NOT_CONTAIN_ENUM_TYPE_DEFINITION_IN_FIELD_TYPE=Автокласс не может содержать поля безымянного перечислимого типа \ No newline at end of file diff --git a/bin/Lng/Rus/SemanticErrors_nv.dat b/bin/Lng/Rus/SemanticErrors_nv.dat index 4157d985c..6dd70333f 100644 --- a/bin/Lng/Rus/SemanticErrors_nv.dat +++ b/bin/Lng/Rus/SemanticErrors_nv.dat @@ -3,6 +3,8 @@ NAME_CANNOT_HAVE_GENERIC_PARAMETERS_{0}=Имя {0} не может иметь обобщенные параметры AUTO_CLASS_MUST_NOT_HAVE_POINTERS=Авто класс не может иметь поля, являющиеся указателями AUTO_CLASS_MUST_NOT_HAVE_PARENTS=Авто класс не может иметь предков +AUTO_CLASS_MUST_NOT_HAVE_UNNAMED_ENUMS=Авто класс не может иметь полей с неименованными перечислимыми типами +AUTO_CLASS_MUST_NOT_HAVE_EVENTS=Авто класс не может иметь поля, являющиеся событиями UNDEFINED_NAME_REFERENCE_{0}=Неизвестное имя '{0}' TWO_TYPE_CONVERTIONS_POSSIBLE_FIRST_TYPE_{0}_SECOND_TYE_{1}=Возможны два преобразования типа: к типу {0} и к типу {1} CAN_NOT_CONVERT_TYPES_FROM_{0}_TO_{1}=Нельзя преобразовать тип {0} к {1}