Merge branch 'master' of github.com:pascalabcnet/pascalabcnet

This commit is contained in:
Бондарев Иван 2018-09-20 21:22:07 +02:00
commit 9dbf240d2f
8 changed files with 26 additions and 8 deletions

View file

@ -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;

View file

@ -1,4 +1,4 @@
%COREVERSION%=2
%REVISION%=1791
%MINOR%=4
%REVISION%=1792
%COREVERSION%=2
%MAJOR%=3

Binary file not shown.

View file

@ -1 +1 @@
!define VERSION '3.4.2.1791'
!define VERSION '3.4.2.1792'

View file

@ -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<ident> fields, List<ident> formal_names, List<type_definition> 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));
}
}

View file

@ -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");
}

View file

@ -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=Левый операнд операции ?. должен иметь ссылочный тип
OPERATOR_DQ_MUST_BE_USED_WITH_A_REFERENCE_TYPE_VALUETYPE=Левый операнд операции ?. должен иметь ссылочный тип
AUTOCLASS_MUST_NOT_CONTAIN_ENUM_TYPE_DEFINITION_IN_FIELD_TYPE=Автокласс не может содержать поля безымянного перечислимого типа

View file

@ -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}