bug fix #1570
This commit is contained in:
parent
7364b10b3f
commit
753f4f219e
|
|
@ -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 = "1887";
|
||||
public const string Revision = "1888";
|
||||
|
||||
public const string MainVersion = Major + "." + Minor;
|
||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%COREVERSION%=2
|
||||
%REVISION%=1887
|
||||
%MINOR%=4
|
||||
%REVISION%=1888
|
||||
%COREVERSION%=2
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,9 +1,9 @@
|
|||
//
|
||||
// This CSharp output file generated by Gardens Point LEX
|
||||
// Version: 1.1.3.301
|
||||
// Machine: DESKTOP-LFNDRFO
|
||||
// DateTime: 12/5/2018 9:39:16 AM
|
||||
// UserName: wowit
|
||||
// Machine: DESKTOP-G8V08V4
|
||||
// DateTime: 06.12.2018 14:23:43
|
||||
// UserName: ?????????
|
||||
// GPLEX input file <ABCPascal.lex>
|
||||
// GPLEX frame file <embedded resource>
|
||||
//
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@
|
|||
%type <stn> used_unit_name
|
||||
%type <stn> unit_header
|
||||
%type <stn> var_decl_sect
|
||||
%type <stn> var_decl var_decl_part /*var_decl_internal*/ field_definition
|
||||
%type <stn> var_decl var_decl_part /*var_decl_internal*/ field_definition var_decl_with_assign_var_tuple
|
||||
%type <stn> var_stmt
|
||||
%type <stn> where_part
|
||||
%type <stn> where_part_list optional_where_section
|
||||
|
|
@ -654,26 +654,39 @@ type_decl_sect
|
|||
}
|
||||
;
|
||||
|
||||
var_decl_with_assign_var_tuple
|
||||
: var_decl
|
||||
{
|
||||
$$ = $1;
|
||||
}
|
||||
| tkRoundOpen identifier tkComma ident_list tkRoundClose tkAssign expr_l1 tkSemiColon
|
||||
{
|
||||
($4 as ident_list).Insert(0,$2);
|
||||
$4.source_context = LexLocation.MergeAll(@1,@2,@3,@4,@5);
|
||||
$$ = new var_tuple_def_statement($4 as ident_list, $7, @$);
|
||||
}
|
||||
;
|
||||
|
||||
var_decl_sect
|
||||
: tkVar var_decl
|
||||
: tkVar var_decl_with_assign_var_tuple
|
||||
{
|
||||
$$ = new variable_definitions($2 as var_def_statement, @$);
|
||||
}
|
||||
| tkEvent var_decl
|
||||
| tkEvent var_decl_with_assign_var_tuple
|
||||
{
|
||||
$$ = new variable_definitions($2 as var_def_statement, @$);
|
||||
($2 as var_def_statement).is_event = true;
|
||||
}
|
||||
| var_decl_sect var_decl
|
||||
| var_decl_sect var_decl_with_assign_var_tuple
|
||||
{
|
||||
$$ = ($1 as variable_definitions).Add($2 as var_def_statement, @$);
|
||||
}
|
||||
| tkVar tkRoundOpen identifier tkComma ident_list tkRoundClose tkAssign expr_l1 tkSemiColon
|
||||
/*| tkVar tkRoundOpen identifier tkComma ident_list tkRoundClose tkAssign expr_l1 tkSemiColon
|
||||
{
|
||||
($5 as ident_list).Insert(0,$3);
|
||||
$5.source_context = LexLocation.MergeAll(@1,@2,@3,@4,@5,@6);
|
||||
$$ = new assign_var_tuple($5 as ident_list, $8, @$);
|
||||
}
|
||||
}*/
|
||||
;
|
||||
|
||||
const_decl
|
||||
|
|
@ -2166,12 +2179,6 @@ var_decl_part
|
|||
{
|
||||
$$ = new var_def_statement($1 as ident_list, $3, $5, definition_attribute.None, false, @$);
|
||||
}
|
||||
/*| tkRoundOpen identifier tkComma ident_list tkRoundClose tkAssign expr_l1
|
||||
{
|
||||
($4 as ident_list).Insert(0,$2);
|
||||
$4.source_context = LexLocation.MergeAll(@1,@2,@3,@4,@5,@6);
|
||||
$$ = new assign_var_tuple($4 as ident_list, $7, @$);
|
||||
}*/
|
||||
;
|
||||
|
||||
typed_var_init_expression
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -239,7 +239,6 @@
|
|||
<name value="const_decl_sect" />
|
||||
<name value="res_str_decl_sect" />
|
||||
<name value="type_decl_sect" />
|
||||
<name value="var_decl_sect" />
|
||||
<name value="uses_clause" />
|
||||
<name value="interface_part" />
|
||||
<name value="implementation_part" />
|
||||
|
|
|
|||
|
|
@ -236,5 +236,6 @@ script=
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.4.2.1887'
|
||||
!define VERSION '3.4.2.1888'
|
||||
|
|
|
|||
|
|
@ -1207,6 +1207,16 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
{
|
||||
DefaultVisit(_deconstruction_variables_definition);
|
||||
}
|
||||
|
||||
public virtual void visit(var_tuple_def_statement _var_tuple_def_statement)
|
||||
{
|
||||
DefaultVisit(_var_tuple_def_statement);
|
||||
}
|
||||
|
||||
public virtual void visit(semantic_check_sugared_var_def_statement_node _semantic_check_sugared_var_def_statement_node)
|
||||
{
|
||||
DefaultVisit(_semantic_check_sugared_var_def_statement_node);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1925,6 +1925,22 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
{
|
||||
}
|
||||
|
||||
public virtual void pre_do_visit(var_tuple_def_statement _var_tuple_def_statement)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void post_do_visit(var_tuple_def_statement _var_tuple_def_statement)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void pre_do_visit(semantic_check_sugared_var_def_statement_node _semantic_check_sugared_var_def_statement_node)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void post_do_visit(semantic_check_sugared_var_def_statement_node _semantic_check_sugared_var_def_statement_node)
|
||||
{
|
||||
}
|
||||
|
||||
public override void visit(expression _expression)
|
||||
{
|
||||
DefaultVisit(_expression);
|
||||
|
|
@ -3985,6 +4001,22 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
visit(deconstruction_variables_definition.definitions[i]);
|
||||
post_do_visit(_deconstruction_variables_definition);
|
||||
}
|
||||
|
||||
public override void visit(var_tuple_def_statement _var_tuple_def_statement)
|
||||
{
|
||||
DefaultVisit(_var_tuple_def_statement);
|
||||
pre_do_visit(_var_tuple_def_statement);
|
||||
post_do_visit(_var_tuple_def_statement);
|
||||
}
|
||||
|
||||
public override void visit(semantic_check_sugared_var_def_statement_node _semantic_check_sugared_var_def_statement_node)
|
||||
{
|
||||
DefaultVisit(_semantic_check_sugared_var_def_statement_node);
|
||||
pre_do_visit(_semantic_check_sugared_var_def_statement_node);
|
||||
for (int i = 0; i < lst.Count; i++)
|
||||
visit(semantic_check_sugared_var_def_statement_node.lst[i]);
|
||||
post_do_visit(_semantic_check_sugared_var_def_statement_node);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -500,6 +500,10 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
return new recursive_deconstructor_parameter();
|
||||
case 239:
|
||||
return new deconstruction_variables_definition();
|
||||
case 240:
|
||||
return new var_tuple_def_statement();
|
||||
case 241:
|
||||
return new semantic_check_sugared_var_def_statement_node();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
@ -4221,6 +4225,42 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public void visit(var_tuple_def_statement _var_tuple_def_statement)
|
||||
{
|
||||
read_var_tuple_def_statement(_var_tuple_def_statement);
|
||||
}
|
||||
|
||||
public void read_var_tuple_def_statement(var_tuple_def_statement _var_tuple_def_statement)
|
||||
{
|
||||
read_var_def_statement(_var_tuple_def_statement);
|
||||
}
|
||||
|
||||
|
||||
public void visit(semantic_check_sugared_var_def_statement_node _semantic_check_sugared_var_def_statement_node)
|
||||
{
|
||||
read_semantic_check_sugared_var_def_statement_node(_semantic_check_sugared_var_def_statement_node);
|
||||
}
|
||||
|
||||
public void read_semantic_check_sugared_var_def_statement_node(semantic_check_sugared_var_def_statement_node _semantic_check_sugared_var_def_statement_node)
|
||||
{
|
||||
read_var_def_statement(_semantic_check_sugared_var_def_statement_node);
|
||||
_semantic_check_sugared_var_def_statement_node.typ = (object)br.ReadByte();
|
||||
if (br.ReadByte() == 0)
|
||||
{
|
||||
_semantic_check_sugared_var_def_statement_node.lst = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
_semantic_check_sugared_var_def_statement_node.lst = new List<syntax_tree_node>();
|
||||
Int32 ssyy_count = br.ReadInt32();
|
||||
for(Int32 ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++)
|
||||
{
|
||||
_semantic_check_sugared_var_def_statement_node.lst.Add(_read_node() as syntax_tree_node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -6654,6 +6654,52 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public void visit(var_tuple_def_statement _var_tuple_def_statement)
|
||||
{
|
||||
bw.Write((Int16)240);
|
||||
write_var_tuple_def_statement(_var_tuple_def_statement);
|
||||
}
|
||||
|
||||
public void write_var_tuple_def_statement(var_tuple_def_statement _var_tuple_def_statement)
|
||||
{
|
||||
write_var_def_statement(_var_tuple_def_statement);
|
||||
}
|
||||
|
||||
|
||||
public void visit(semantic_check_sugared_var_def_statement_node _semantic_check_sugared_var_def_statement_node)
|
||||
{
|
||||
bw.Write((Int16)241);
|
||||
write_semantic_check_sugared_var_def_statement_node(_semantic_check_sugared_var_def_statement_node);
|
||||
}
|
||||
|
||||
public void write_semantic_check_sugared_var_def_statement_node(semantic_check_sugared_var_def_statement_node _semantic_check_sugared_var_def_statement_node)
|
||||
{
|
||||
write_var_def_statement(_semantic_check_sugared_var_def_statement_node);
|
||||
bw.Write((byte)_semantic_check_sugared_var_def_statement_node.typ);
|
||||
if (_semantic_check_sugared_var_def_statement_node.lst == null)
|
||||
{
|
||||
bw.Write((byte)0);
|
||||
}
|
||||
else
|
||||
{
|
||||
bw.Write((byte)1);
|
||||
bw.Write(_semantic_check_sugared_var_def_statement_node.lst.Count);
|
||||
for(Int32 ssyy_i = 0; ssyy_i < _semantic_check_sugared_var_def_statement_node.lst.Count; ssyy_i++)
|
||||
{
|
||||
if (_semantic_check_sugared_var_def_statement_node.lst[ssyy_i] == null)
|
||||
{
|
||||
bw.Write((byte)0);
|
||||
}
|
||||
else
|
||||
{
|
||||
bw.Write((byte)1);
|
||||
_semantic_check_sugared_var_def_statement_node.lst[ssyy_i].visit(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -47208,7 +47208,7 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
|
||||
|
||||
///<summary>
|
||||
///Узел, не генерирующий кода, но осуществляющий семантические проверки сахарных узлов. stat - это на самом деле statement. stat сделано типа object - чтобы оно автоматически не обходилось
|
||||
///
|
||||
///</summary>
|
||||
[Serializable]
|
||||
public partial class semantic_check_sugared_statement_node : statement
|
||||
|
|
@ -51859,6 +51859,608 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
}
|
||||
|
||||
|
||||
///<summary>
|
||||
///
|
||||
///</summary>
|
||||
[Serializable]
|
||||
public partial class var_tuple_def_statement : var_def_statement
|
||||
{
|
||||
|
||||
///<summary>
|
||||
///Конструктор без параметров.
|
||||
///</summary>
|
||||
public var_tuple_def_statement()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
///<summary>
|
||||
///Конструктор с параметрами.
|
||||
///</summary>
|
||||
public var_tuple_def_statement(ident_list _vars,type_definition _vars_type,expression _inital_value,definition_attribute _var_attr,bool _is_event)
|
||||
{
|
||||
this._vars=_vars;
|
||||
this._vars_type=_vars_type;
|
||||
this._inital_value=_inital_value;
|
||||
this._var_attr=_var_attr;
|
||||
this._is_event=_is_event;
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Конструктор с параметрами.
|
||||
///</summary>
|
||||
public var_tuple_def_statement(ident_list _vars,type_definition _vars_type,expression _inital_value,definition_attribute _var_attr,bool _is_event,SourceContext sc)
|
||||
{
|
||||
this._vars=_vars;
|
||||
this._vars_type=_vars_type;
|
||||
this._inital_value=_inital_value;
|
||||
this._var_attr=_var_attr;
|
||||
this._is_event=_is_event;
|
||||
source_context = sc;
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
/// <summary> Создает копию узла </summary>
|
||||
public override syntax_tree_node Clone()
|
||||
{
|
||||
var_tuple_def_statement copy = new var_tuple_def_statement();
|
||||
copy.Parent = this.Parent;
|
||||
if (source_context != null)
|
||||
copy.source_context = new SourceContext(source_context);
|
||||
if (attributes != null)
|
||||
{
|
||||
copy.attributes = (attribute_list)attributes.Clone();
|
||||
copy.attributes.Parent = copy;
|
||||
}
|
||||
if (vars != null)
|
||||
{
|
||||
copy.vars = (ident_list)vars.Clone();
|
||||
copy.vars.Parent = copy;
|
||||
}
|
||||
if (vars_type != null)
|
||||
{
|
||||
copy.vars_type = (type_definition)vars_type.Clone();
|
||||
copy.vars_type.Parent = copy;
|
||||
}
|
||||
if (inital_value != null)
|
||||
{
|
||||
copy.inital_value = (expression)inital_value.Clone();
|
||||
copy.inital_value.Parent = copy;
|
||||
}
|
||||
copy.var_attr = var_attr;
|
||||
copy.is_event = is_event;
|
||||
return copy;
|
||||
}
|
||||
|
||||
/// <summary> Получает копию данного узла корректного типа </summary>
|
||||
public new var_tuple_def_statement TypedClone()
|
||||
{
|
||||
return Clone() as var_tuple_def_statement;
|
||||
}
|
||||
|
||||
///<summary> Заполняет поля Parent в непосредственных дочерних узлах </summary>
|
||||
public override void FillParentsInDirectChilds()
|
||||
{
|
||||
if (attributes != null)
|
||||
attributes.Parent = this;
|
||||
if (vars != null)
|
||||
vars.Parent = this;
|
||||
if (vars_type != null)
|
||||
vars_type.Parent = this;
|
||||
if (inital_value != null)
|
||||
inital_value.Parent = this;
|
||||
}
|
||||
|
||||
///<summary> Заполняет поля Parent во всем поддереве </summary>
|
||||
public override void FillParentsInAllChilds()
|
||||
{
|
||||
FillParentsInDirectChilds();
|
||||
attributes?.FillParentsInAllChilds();
|
||||
vars?.FillParentsInAllChilds();
|
||||
vars_type?.FillParentsInAllChilds();
|
||||
inital_value?.FillParentsInAllChilds();
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Свойство для получения количества всех подузлов без элементов поля типа List
|
||||
///</summary>
|
||||
public override Int32 subnodes_without_list_elements_count
|
||||
{
|
||||
get
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
///<summary>
|
||||
///Свойство для получения количества всех подузлов. Подузлом также считается каждый элемент поля типа List
|
||||
///</summary>
|
||||
public override Int32 subnodes_count
|
||||
{
|
||||
get
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
///<summary>
|
||||
///Индексатор для получения всех подузлов
|
||||
///</summary>
|
||||
public override syntax_tree_node this[Int32 ind]
|
||||
{
|
||||
get
|
||||
{
|
||||
if(subnodes_count == 0 || ind < 0 || ind > subnodes_count-1)
|
||||
throw new IndexOutOfRangeException();
|
||||
switch(ind)
|
||||
{
|
||||
case 0:
|
||||
return vars;
|
||||
case 1:
|
||||
return vars_type;
|
||||
case 2:
|
||||
return inital_value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
set
|
||||
{
|
||||
if(subnodes_count == 0 || ind < 0 || ind > subnodes_count-1)
|
||||
throw new IndexOutOfRangeException();
|
||||
switch(ind)
|
||||
{
|
||||
case 0:
|
||||
vars = (ident_list)value;
|
||||
break;
|
||||
case 1:
|
||||
vars_type = (type_definition)value;
|
||||
break;
|
||||
case 2:
|
||||
inital_value = (expression)value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
///<summary>
|
||||
///Метод для обхода дерева посетителем
|
||||
///</summary>
|
||||
///<param name="visitor">Объект-посетитель.</param>
|
||||
///<returns>Return value is void</returns>
|
||||
public override void visit(IVisitor visitor)
|
||||
{
|
||||
visitor.visit(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
///<summary>
|
||||
///
|
||||
///</summary>
|
||||
[Serializable]
|
||||
public partial class semantic_check_sugared_var_def_statement_node : var_def_statement
|
||||
{
|
||||
|
||||
///<summary>
|
||||
///Конструктор без параметров.
|
||||
///</summary>
|
||||
public semantic_check_sugared_var_def_statement_node()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Конструктор с параметрами.
|
||||
///</summary>
|
||||
public semantic_check_sugared_var_def_statement_node(object _typ,List<syntax_tree_node> _lst)
|
||||
{
|
||||
this._typ=_typ;
|
||||
this._lst=_lst;
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Конструктор с параметрами.
|
||||
///</summary>
|
||||
public semantic_check_sugared_var_def_statement_node(object _typ,List<syntax_tree_node> _lst,SourceContext sc)
|
||||
{
|
||||
this._typ=_typ;
|
||||
this._lst=_lst;
|
||||
source_context = sc;
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Конструктор с параметрами.
|
||||
///</summary>
|
||||
public semantic_check_sugared_var_def_statement_node(ident_list _vars,type_definition _vars_type,expression _inital_value,definition_attribute _var_attr,bool _is_event,object _typ,List<syntax_tree_node> _lst)
|
||||
{
|
||||
this._vars=_vars;
|
||||
this._vars_type=_vars_type;
|
||||
this._inital_value=_inital_value;
|
||||
this._var_attr=_var_attr;
|
||||
this._is_event=_is_event;
|
||||
this._typ=_typ;
|
||||
this._lst=_lst;
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Конструктор с параметрами.
|
||||
///</summary>
|
||||
public semantic_check_sugared_var_def_statement_node(ident_list _vars,type_definition _vars_type,expression _inital_value,definition_attribute _var_attr,bool _is_event,object _typ,List<syntax_tree_node> _lst,SourceContext sc)
|
||||
{
|
||||
this._vars=_vars;
|
||||
this._vars_type=_vars_type;
|
||||
this._inital_value=_inital_value;
|
||||
this._var_attr=_var_attr;
|
||||
this._is_event=_is_event;
|
||||
this._typ=_typ;
|
||||
this._lst=_lst;
|
||||
source_context = sc;
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
public semantic_check_sugared_var_def_statement_node(syntax_tree_node elem, SourceContext sc = null)
|
||||
{
|
||||
Add(elem, sc);
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
|
||||
protected object _typ;
|
||||
protected List<syntax_tree_node> _lst=new List<syntax_tree_node>();
|
||||
|
||||
///<summary>
|
||||
///
|
||||
///</summary>
|
||||
public object typ
|
||||
{
|
||||
get
|
||||
{
|
||||
return _typ;
|
||||
}
|
||||
set
|
||||
{
|
||||
_typ=value;
|
||||
}
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///
|
||||
///</summary>
|
||||
public List<syntax_tree_node> lst
|
||||
{
|
||||
get
|
||||
{
|
||||
return _lst;
|
||||
}
|
||||
set
|
||||
{
|
||||
_lst=value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public semantic_check_sugared_var_def_statement_node Add(syntax_tree_node elem, SourceContext sc = null)
|
||||
{
|
||||
lst.Add(elem);
|
||||
if (elem != null)
|
||||
elem.Parent = this;
|
||||
if (sc != null)
|
||||
source_context = sc;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void AddFirst(syntax_tree_node el)
|
||||
{
|
||||
if (el == null)
|
||||
throw new ArgumentNullException(nameof(el));
|
||||
lst.Insert(0, el);
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
|
||||
public void AddFirst(IEnumerable<syntax_tree_node> els)
|
||||
{
|
||||
if (els == null)
|
||||
throw new ArgumentNullException(nameof(els));
|
||||
lst.InsertRange(0, els);
|
||||
foreach (var el in els)
|
||||
if (el != null)
|
||||
el.Parent = this;
|
||||
}
|
||||
|
||||
public void AddMany(params syntax_tree_node[] els)
|
||||
{
|
||||
if (els == null)
|
||||
throw new ArgumentNullException(nameof(els));
|
||||
lst.AddRange(els);
|
||||
foreach (var el in els)
|
||||
if (el != null)
|
||||
el.Parent = this;
|
||||
}
|
||||
|
||||
private int FindIndexInList(syntax_tree_node el)
|
||||
{
|
||||
if (el == null)
|
||||
throw new ArgumentNullException(nameof(el));
|
||||
var ind = lst.FindIndex(x => x == el);
|
||||
if (ind == -1)
|
||||
throw new Exception(string.Format("У списка {0} не найден элемент {1} среди дочерних\n", this, el));
|
||||
return ind;
|
||||
}
|
||||
|
||||
public void InsertAfter(syntax_tree_node el, syntax_tree_node newel)
|
||||
{
|
||||
if (el == null)
|
||||
throw new ArgumentNullException(nameof(el));
|
||||
if (newel == null)
|
||||
throw new ArgumentNullException(nameof(newel));
|
||||
lst.Insert(FindIndexInList(el) + 1, newel);
|
||||
newel.Parent = this;
|
||||
}
|
||||
|
||||
public void InsertAfter(syntax_tree_node el, IEnumerable<syntax_tree_node> newels)
|
||||
{
|
||||
if (el == null)
|
||||
throw new ArgumentNullException(nameof(el));
|
||||
if (newels == null)
|
||||
throw new ArgumentNullException(nameof(newels));
|
||||
lst.InsertRange(FindIndexInList(el) + 1, newels);
|
||||
foreach (var newel in newels)
|
||||
if (newel != null)
|
||||
newel.Parent = this;
|
||||
}
|
||||
|
||||
public void InsertBefore(syntax_tree_node el, syntax_tree_node newel)
|
||||
{
|
||||
if (el == null)
|
||||
throw new ArgumentNullException(nameof(el));
|
||||
if (newel == null)
|
||||
throw new ArgumentNullException(nameof(newel));
|
||||
lst.Insert(FindIndexInList(el), newel);
|
||||
newel.Parent = this;
|
||||
}
|
||||
|
||||
public void InsertBefore(syntax_tree_node el, IEnumerable<syntax_tree_node> newels)
|
||||
{
|
||||
if (el == null)
|
||||
throw new ArgumentNullException(nameof(el));
|
||||
if (newels == null)
|
||||
throw new ArgumentNullException(nameof(newels));
|
||||
lst.InsertRange(FindIndexInList(el), newels);
|
||||
foreach (var newel in newels)
|
||||
if (newel != null)
|
||||
newel.Parent = this;
|
||||
}
|
||||
|
||||
public bool Remove(syntax_tree_node el)
|
||||
{
|
||||
return lst.Remove(el);
|
||||
}
|
||||
|
||||
public void ReplaceInList(syntax_tree_node el, syntax_tree_node newel)
|
||||
{
|
||||
if (el == null)
|
||||
throw new ArgumentNullException(nameof(el));
|
||||
if (newel == null)
|
||||
throw new ArgumentNullException(nameof(newel));
|
||||
lst[FindIndexInList(el)] = newel;
|
||||
newel.Parent = this;
|
||||
}
|
||||
|
||||
public void ReplaceInList(syntax_tree_node el, IEnumerable<syntax_tree_node> newels)
|
||||
{
|
||||
if (el == null)
|
||||
throw new ArgumentNullException(nameof(el));
|
||||
if (newels == null)
|
||||
throw new ArgumentNullException(nameof(newels));
|
||||
var ind = FindIndexInList(el);
|
||||
lst.RemoveAt(ind);
|
||||
lst.InsertRange(ind, newels);
|
||||
foreach (var newel in newels)
|
||||
if (newel != null)
|
||||
newel.Parent = this;
|
||||
}
|
||||
|
||||
public int RemoveAll(Predicate<syntax_tree_node> match)
|
||||
{
|
||||
return lst.RemoveAll(match);
|
||||
}
|
||||
|
||||
public syntax_tree_node Last()
|
||||
{
|
||||
if (lst.Count > 0)
|
||||
return lst[lst.Count - 1];
|
||||
throw new InvalidOperationException("Список пуст");
|
||||
}
|
||||
|
||||
public int Count
|
||||
{
|
||||
get { return lst.Count; }
|
||||
}
|
||||
|
||||
public void Insert(int pos, syntax_tree_node el)
|
||||
{
|
||||
if (el == null)
|
||||
throw new ArgumentNullException(nameof(el));
|
||||
lst.Insert(pos,el);
|
||||
if (el != null)
|
||||
el.Parent = this;
|
||||
}
|
||||
|
||||
|
||||
/// <summary> Создает копию узла </summary>
|
||||
public override syntax_tree_node Clone()
|
||||
{
|
||||
semantic_check_sugared_var_def_statement_node copy = new semantic_check_sugared_var_def_statement_node();
|
||||
copy.Parent = this.Parent;
|
||||
if (source_context != null)
|
||||
copy.source_context = new SourceContext(source_context);
|
||||
if (attributes != null)
|
||||
{
|
||||
copy.attributes = (attribute_list)attributes.Clone();
|
||||
copy.attributes.Parent = copy;
|
||||
}
|
||||
if (vars != null)
|
||||
{
|
||||
copy.vars = (ident_list)vars.Clone();
|
||||
copy.vars.Parent = copy;
|
||||
}
|
||||
if (vars_type != null)
|
||||
{
|
||||
copy.vars_type = (type_definition)vars_type.Clone();
|
||||
copy.vars_type.Parent = copy;
|
||||
}
|
||||
if (inital_value != null)
|
||||
{
|
||||
copy.inital_value = (expression)inital_value.Clone();
|
||||
copy.inital_value.Parent = copy;
|
||||
}
|
||||
copy.var_attr = var_attr;
|
||||
copy.is_event = is_event;
|
||||
copy.typ = typ;
|
||||
if (lst != null)
|
||||
{
|
||||
foreach (syntax_tree_node elem in lst)
|
||||
{
|
||||
if (elem != null)
|
||||
{
|
||||
copy.Add(elem.Clone());
|
||||
copy.Last().Parent = copy;
|
||||
}
|
||||
else
|
||||
copy.Add(null);
|
||||
}
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
/// <summary> Получает копию данного узла корректного типа </summary>
|
||||
public new semantic_check_sugared_var_def_statement_node TypedClone()
|
||||
{
|
||||
return Clone() as semantic_check_sugared_var_def_statement_node;
|
||||
}
|
||||
|
||||
///<summary> Заполняет поля Parent в непосредственных дочерних узлах </summary>
|
||||
public override void FillParentsInDirectChilds()
|
||||
{
|
||||
if (attributes != null)
|
||||
attributes.Parent = this;
|
||||
if (vars != null)
|
||||
vars.Parent = this;
|
||||
if (vars_type != null)
|
||||
vars_type.Parent = this;
|
||||
if (inital_value != null)
|
||||
inital_value.Parent = this;
|
||||
if (lst != null)
|
||||
{
|
||||
foreach (var child in lst)
|
||||
if (child != null)
|
||||
child.Parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
///<summary> Заполняет поля Parent во всем поддереве </summary>
|
||||
public override void FillParentsInAllChilds()
|
||||
{
|
||||
FillParentsInDirectChilds();
|
||||
attributes?.FillParentsInAllChilds();
|
||||
vars?.FillParentsInAllChilds();
|
||||
vars_type?.FillParentsInAllChilds();
|
||||
inital_value?.FillParentsInAllChilds();
|
||||
if (lst != null)
|
||||
{
|
||||
foreach (var child in lst)
|
||||
child?.FillParentsInAllChilds();
|
||||
}
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Свойство для получения количества всех подузлов без элементов поля типа List
|
||||
///</summary>
|
||||
public override Int32 subnodes_without_list_elements_count
|
||||
{
|
||||
get
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
///<summary>
|
||||
///Свойство для получения количества всех подузлов. Подузлом также считается каждый элемент поля типа List
|
||||
///</summary>
|
||||
public override Int32 subnodes_count
|
||||
{
|
||||
get
|
||||
{
|
||||
return 3 + (lst == null ? 0 : lst.Count);
|
||||
}
|
||||
}
|
||||
///<summary>
|
||||
///Индексатор для получения всех подузлов
|
||||
///</summary>
|
||||
public override syntax_tree_node this[Int32 ind]
|
||||
{
|
||||
get
|
||||
{
|
||||
if(subnodes_count == 0 || ind < 0 || ind > subnodes_count-1)
|
||||
throw new IndexOutOfRangeException();
|
||||
switch(ind)
|
||||
{
|
||||
case 0:
|
||||
return vars;
|
||||
case 1:
|
||||
return vars_type;
|
||||
case 2:
|
||||
return inital_value;
|
||||
}
|
||||
Int32 index_counter=ind - 3;
|
||||
if(lst != null)
|
||||
{
|
||||
if(index_counter < lst.Count)
|
||||
{
|
||||
return lst[index_counter];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
set
|
||||
{
|
||||
if(subnodes_count == 0 || ind < 0 || ind > subnodes_count-1)
|
||||
throw new IndexOutOfRangeException();
|
||||
switch(ind)
|
||||
{
|
||||
case 0:
|
||||
vars = (ident_list)value;
|
||||
break;
|
||||
case 1:
|
||||
vars_type = (type_definition)value;
|
||||
break;
|
||||
case 2:
|
||||
inital_value = (expression)value;
|
||||
break;
|
||||
}
|
||||
Int32 index_counter=ind - 3;
|
||||
if(lst != null)
|
||||
{
|
||||
if(index_counter < lst.Count)
|
||||
{
|
||||
lst[index_counter]= (syntax_tree_node)value;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
///<summary>
|
||||
///Метод для обхода дерева посетителем
|
||||
///</summary>
|
||||
///<param name="visitor">Объект-посетитель.</param>
|
||||
///<returns>Return value is void</returns>
|
||||
public override void visit(IVisitor visitor)
|
||||
{
|
||||
visitor.visit(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -556,6 +556,12 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
}
|
||||
}
|
||||
|
||||
public partial class var_tuple_def_statement
|
||||
{
|
||||
public var_tuple_def_statement(ident_list vars, expression iv, SourceContext sc = null) : this(vars, null, iv, definition_attribute.None, false, sc)
|
||||
{ }
|
||||
}
|
||||
|
||||
public partial class declarations
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -1444,6 +1444,18 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
///<param name="_deconstruction_variables_definition">Node to visit</param>
|
||||
///<returns> Return value is void </returns>
|
||||
void visit(deconstruction_variables_definition _deconstruction_variables_definition);
|
||||
///<summary>
|
||||
///Method to visit var_tuple_def_statement.
|
||||
///</summary>
|
||||
///<param name="_var_tuple_def_statement">Node to visit</param>
|
||||
///<returns> Return value is void </returns>
|
||||
void visit(var_tuple_def_statement _var_tuple_def_statement);
|
||||
///<summary>
|
||||
///Method to visit semantic_check_sugared_var_def_statement_node.
|
||||
///</summary>
|
||||
///<param name="_semantic_check_sugared_var_def_statement_node">Node to visit</param>
|
||||
///<returns> Return value is void </returns>
|
||||
void visit(semantic_check_sugared_var_def_statement_node _semantic_check_sugared_var_def_statement_node);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3135,6 +3135,25 @@
|
|||
</TagIndices>
|
||||
</Tags>
|
||||
</SyntaxNode>
|
||||
<SyntaxNode Name="var_tuple_def_statement" BaseName="var_def_statement">
|
||||
<Fields />
|
||||
<Methods />
|
||||
<Tags>
|
||||
<CategoryIndices />
|
||||
<TagIndices />
|
||||
</Tags>
|
||||
</SyntaxNode>
|
||||
<SyntaxNode Name="semantic_check_sugared_var_def_statement_node" BaseName="var_def_statement">
|
||||
<Fields>
|
||||
<ExtendedField Name="typ" Type="object" CreateVariable="false" DeleteVariable="false" />
|
||||
<ExtendedField Name="lst" Type="List<syntax_tree_node>" CreateVariable="true" DeleteVariable="false" />
|
||||
</Fields>
|
||||
<Methods />
|
||||
<Tags>
|
||||
<CategoryIndices />
|
||||
<TagIndices />
|
||||
</Tags>
|
||||
</SyntaxNode>
|
||||
</SyntaxNodes>
|
||||
<Settings>
|
||||
<FileName>Tree.cs</FileName>
|
||||
|
|
@ -3230,6 +3249,7 @@
|
|||
<HelpData Key=".tags" Value="" />
|
||||
<HelpData Key=".tn" Value="" />
|
||||
<HelpData Key=".to" Value="" />
|
||||
<HelpData Key=".typ" Value="" />
|
||||
<HelpData Key=".type" Value="" />
|
||||
<HelpData Key=".types" Value="" />
|
||||
<HelpData Key=".unknown_foreach" Value="" />
|
||||
|
|
@ -4185,10 +4205,13 @@
|
|||
<HelpData Key="semantic_check_statement.stat" Value="" />
|
||||
<HelpData Key="semantic_check_sugared_statement" Value="узел, не генерирующий кода, но осуществляющий семантические проверки сахарных узлов. stat - это на самом деле statement. stat сделано типа object - чтобы оно автоматически не обходилось" />
|
||||
<HelpData Key="semantic_check_sugared_statement.stat" Value="" />
|
||||
<HelpData Key="semantic_check_sugared_statement_node" Value="Узел, не генерирующий кода, но осуществляющий семантические проверки сахарных узлов. stat - это на самом деле statement. stat сделано типа object - чтобы оно автоматически не обходилось" />
|
||||
<HelpData Key="semantic_check_sugared_statement_node" Value="" />
|
||||
<HelpData Key="semantic_check_sugared_statement_node.lst" Value="" />
|
||||
<HelpData Key="semantic_check_sugared_statement_node.stat" Value="" />
|
||||
<HelpData Key="semantic_check_sugared_statement_node.typ" Value="" />
|
||||
<HelpData Key="semantic_check_sugared_var_def_statement_node" Value="" />
|
||||
<HelpData Key="semantic_check_sugared_var_def_statement_node.lst" Value="" />
|
||||
<HelpData Key="semantic_check_sugared_var_def_statement_node.typ" Value="" />
|
||||
<HelpData Key="semantic_expr_node" Value="" />
|
||||
<HelpData Key="semantic_expr_node.expr" Value="" />
|
||||
<HelpData Key="semantic_type_node" Value="" />
|
||||
|
|
@ -4547,6 +4570,7 @@
|
|||
<HelpData Key="var_statement." Value="" />
|
||||
<HelpData Key="var_statement.override string ToString()" Value="" />
|
||||
<HelpData Key="var_statement.var_def" Value="" />
|
||||
<HelpData Key="var_tuple_def_statement" Value="" />
|
||||
<HelpData Key="variable_definitions" Value="Секция описания переменных (до beginа). Состоит из var_def_statement. Не путать с var_statement - однострочным описанием переменной внутри begin-end" />
|
||||
<HelpData Key="variable_definitions." Value="" />
|
||||
<HelpData Key="variable_definitions.override string ToString()" Value="" />
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ namespace SyntaxVisitors.SugarVisitors
|
|||
visit(asstup.expr);
|
||||
}
|
||||
|
||||
public void ReplaceAssignVarTupleUsingParent(assign_var_tuple from, IEnumerable<declaration> to, Desc d = Desc.DirectDescendants)
|
||||
public void ReplaceAssignVarTupleUsingParent(assign_var_tuple from, IEnumerable<declaration> to)
|
||||
{
|
||||
foreach (var x in to)
|
||||
x.Parent = from.Parent;
|
||||
|
|
@ -64,6 +64,40 @@ namespace SyntaxVisitors.SugarVisitors
|
|||
}
|
||||
}
|
||||
|
||||
public void ReplaceVarTupleDefStatementUsingParent(var_tuple_def_statement from, IEnumerable<var_def_statement> to)
|
||||
{
|
||||
foreach (var x in to)
|
||||
x.Parent = from.Parent;
|
||||
var sl = from.Parent as variable_definitions;
|
||||
if (sl != null)
|
||||
{
|
||||
sl.ReplaceInList(from, to);
|
||||
}
|
||||
}
|
||||
public override void visit(var_tuple_def_statement vtd)
|
||||
{
|
||||
// Состоит из var_def_statements. Некоторые являются var_tuple_def_statement
|
||||
// Их надо найти и сделать несколько секций variable_definitions - без семантических проверок.
|
||||
// Каждую var_tuple_def_statement надо заменить на assign_var_tuple - одну на секцию variable_definitions
|
||||
// А потом оставшаяся часть визитора сделает семантические проверки
|
||||
var tname = "#temp_var" + UniqueNumStr();
|
||||
var vd = new List<var_def_statement>();
|
||||
vd.Add(new semantic_check_sugared_var_def_statement_node(typeof(assign_var_tuple), new List<syntax_tree_node> { vtd.vars, vtd.inital_value }, vtd.source_context)); // Это нужно для проверок на этапе преобразования в семантику
|
||||
var tt1 = new var_def_statement(new ident(tname), vtd.inital_value);
|
||||
vd.Add(tt1);
|
||||
var nn = vtd.vars.idents.Count();
|
||||
for (var i = 0; i < nn; i++)
|
||||
{
|
||||
var a = new var_def_statement(vtd.vars.idents[i],
|
||||
new dot_node(new ident(tname), new ident("Item" + (i + 1).ToString())),
|
||||
vtd.vars.idents[i].source_context);
|
||||
vd.Add(a);
|
||||
}
|
||||
|
||||
ReplaceVarTupleDefStatementUsingParent(vtd, vd);
|
||||
visit(vtd.inital_value);
|
||||
return;
|
||||
}
|
||||
|
||||
public override void visit(assign_var_tuple assvartup)
|
||||
{
|
||||
|
|
|
|||
8
TestSuite/CompilationSamples/var_ass_tuple1.pas
Normal file
8
TestSuite/CompilationSamples/var_ass_tuple1.pas
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
var
|
||||
i: integer;
|
||||
j: integer;
|
||||
(x,y) := (2,3);
|
||||
|
||||
begin
|
||||
|
||||
end.
|
||||
8
TestSuite/CompilationSamples/var_ass_tuple2.pas
Normal file
8
TestSuite/CompilationSamples/var_ass_tuple2.pas
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
var
|
||||
(x,y) := (2,3);
|
||||
i: integer;
|
||||
j: integer;
|
||||
|
||||
begin
|
||||
|
||||
end.
|
||||
|
|
@ -20032,7 +20032,22 @@ namespace PascalABCCompiler.TreeConverter
|
|||
// !Patterns
|
||||
else
|
||||
{
|
||||
AddError(get_location(st), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}", (st.typ as System.Type)?.Name??"Unknown");
|
||||
AddError(get_location(st), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}", (st.typ as System.Type)?.Name ?? "Unknown");
|
||||
}
|
||||
ret.reset(); // обязательно очистить - этот узел в семантику ничего не должен приносить!
|
||||
}
|
||||
|
||||
public override void visit(SyntaxTree.semantic_check_sugared_var_def_statement_node st)
|
||||
{
|
||||
if (st.typ as System.Type == typeof(SyntaxTree.assign_var_tuple))
|
||||
{
|
||||
var idents = st.lst[0] as SyntaxTree.ident_list;
|
||||
var expr = st.lst[1] as SyntaxTree.expression;
|
||||
semantic_check_assign_var_tuple(idents, expr);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddError(get_location(st), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}", (st.typ as System.Type)?.Name ?? "Unknown");
|
||||
}
|
||||
ret.reset(); // обязательно очистить - этот узел в семантику ничего не должен приносить!
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,12 +60,11 @@ namespace VisualPascalABC
|
|||
this.lvErrorsList.GridLines = true;
|
||||
this.lvErrorsList.HideSelection = false;
|
||||
this.lvErrorsList.Location = new System.Drawing.Point(0, 0);
|
||||
this.lvErrorsList.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.lvErrorsList.MultiSelect = false;
|
||||
this.lvErrorsList.Name = "lvErrorsList";
|
||||
this.lvErrorsList.RightToLeftLayout = true;
|
||||
this.lvErrorsList.ShowItemToolTips = true;
|
||||
this.lvErrorsList.Size = new System.Drawing.Size(1049, 336);
|
||||
this.lvErrorsList.Size = new System.Drawing.Size(787, 273);
|
||||
this.lvErrorsList.SmallImageList = this.ilvlErrorList;
|
||||
this.lvErrorsList.TabIndex = 1;
|
||||
this.lvErrorsList.TileSize = new System.Drawing.Size(1, 1);
|
||||
|
|
@ -110,12 +109,12 @@ namespace VisualPascalABC
|
|||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tPCOPYToolStripMenuItem});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(140, 26);
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(124, 26);
|
||||
//
|
||||
// tPCOPYToolStripMenuItem
|
||||
//
|
||||
this.tPCOPYToolStripMenuItem.Name = "tPCOPYToolStripMenuItem";
|
||||
this.tPCOPYToolStripMenuItem.Size = new System.Drawing.Size(139, 22);
|
||||
this.tPCOPYToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
|
||||
this.tPCOPYToolStripMenuItem.Text = "ER_COPY";
|
||||
this.tPCOPYToolStripMenuItem.Click += new System.EventHandler(this.tPCOPYToolStripMenuItem_Click);
|
||||
//
|
||||
|
|
@ -129,14 +128,14 @@ namespace VisualPascalABC
|
|||
//
|
||||
// ErrorsListWindowForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1049, 336);
|
||||
this.ClientSize = new System.Drawing.Size(787, 273);
|
||||
this.Controls.Add(this.lvErrorsList);
|
||||
this.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockBottom;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.Name = "ErrorsListWindowForm";
|
||||
this.ShowIcon = false;
|
||||
this.TabText = "TP_ERRORSLIST";
|
||||
this.Text = "TP_ERRORSLIST";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ErrorsListWindowForm_FormClosing);
|
||||
|
|
|
|||
|
|
@ -128,65 +128,65 @@
|
|||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6
|
||||
DgAAAk1TRnQBSQFMAgEBAwEAAUQBAAFEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||
AwABEAMAAQEBAAEgBgABEBYAAyoBQAGMAWYBaAH/AYQBWgFbAf8BhQFaAVwB/wGFAVoBXAH/AYQBWwFc
|
||||
Af8BhAFaAVwB/wGEAVsBXAH/AYUBWgFcAf8BhQFbAVwB/wGFAVoBXAH/AYUBWgFcAf8BhAFaAVwB/wGL
|
||||
AVEBUAH/AyoBQBAAAUcCRgGAAVMBVwFuAf8BIQEjAVUB/wERARIBTAH/AQ8BEAFDAf8BFgEXATEB/wE5
|
||||
ATwBPQH/AVkCVwG/AyoBQCwAAaYBpwHEAf8BMwE1AXcB/wEMAQ0BYQH/AgkBVAH/ASMBJQFQAf8BhgGI
|
||||
AZEB/0gAAyoBQAEHAbMB2wH/AQABrAHVAf8BAAGsAdYB/wEAAawB1gH/AQABrAHWAf8BAAGuAdkB/wEA
|
||||
AbkB5gH/AQABsAHdAf8BAAGtAdYB/wEAAawB1gH/AQABrAHWAf8BAAGsAdYB/wEAAbUB4gH/ATkBXwFx
|
||||
Af8BhgFMAUsB/wwAA1cBvwIGAXYB/wIAAYYB/wIAAYQB/wIAAYMB/wIAAYEB/wIAAYEB/wIAAWcB/wIB
|
||||
ASsB/wE9AUABQQH/AyoBQCQAAY4BjwHHAf8CDgGRAf8CAAGQAf8CAAGSAf8CAAGOAf8CAAGDAf8CBAFa
|
||||
Af8BawFsAYEB/0QAAUcCRgGAAQABugHkAf8BAAHOAfkB/wEAAc8B+gH/AQABzwH6Af8BAAHRAfsB/wEA
|
||||
AbMB0wH/ATYBLQE9Af8BXgGuAcoB/wEAAdQB+wH/AQABzwH6Af8BAAHPAfoB/wEAAdIB+wH/AQAByQH1
|
||||
Af8BGgGcAbkB/wFZAlcBvwgAA1cBvwIAAY8B/wIAAY0B/wIAAZEB/wIAAZQB/wIAAZUB/wIAAZIB/wIA
|
||||
AY0B/wIAAYUB/wIAAYEB/wIAAUcB/wEwATIBMwH/AyoBQAwAAcAB0AHJAf8MAAKvAdwB/wEQAREBogH/
|
||||
AlYBuwH/AisBuAH/AgABqwH/AgwBqgH/AmcBwgH/AhABlgH/AQgBCQFeAf8BoQGiAagB/0AAAyoBQAEB
|
||||
AcIB6AH/AQMB2AH7Af8BAAHXAv8BAAHVAv8BAAHXAv8BAAFyAYkB/wEdAQABBQH/AUIBLAE+Af8BAAHj
|
||||
Av8BAAHVAv8BAAHUAv8BDgHoAv8BAAHUAfwB/wFEAVsBaAH/AyoBQAQAAVgCVwG/AgABlwH/AgABlgH/
|
||||
AiEBqwH/AgABoQH/AgABpgH/AgABpgH/AgABowH/AgABnAH/AiABpAH/AgABiQH/AgABhQH/AgABQQH/
|
||||
AVIBVgFYAf8MAAEKAVoBCgH/AcIB0QHLAf8IAAFDAUQBvQH/AgUBsAH/AowBvQH/AsoB6QH/AkMBygH/
|
||||
AqYB2gH/AswB3gH/AiYBrAH/AgABiwH/AUcBSQFuAf9EAANXAb8BAAHOAfIB/wEGAeQC/wEAAdgC/wEA
|
||||
AdoC/wEAAdgB8gH/AQABcwGBAf8BAgGwAcgB/wEAAdwC/wEAAdkC/wEBAd8C/wEPAesC/wEDAcMB5AH/
|
||||
AVkCVwG/BAADKgFAAgQBpgH/AgABogH/AVUBUAFkAeoC/wH7Af8CXQHOAf8CAAGvAf8CAAGxAf8CAAGv
|
||||
Af8CWAG6Bf8CTwG7Af8CAAGQAf8CAAGKAf8CDQEmAf8BRwJGAYAIAAEKAWIBGgH/AQABWgEKAf8BxQHT
|
||||
Ac0B/wQAAREBEgG7Af8CAAHIAf8CDQHCAf8CqgHQAf8C6QH5Af8C4QHuAf8CQAHBAf8CAAG9Af8CAAGo
|
||||
Af8BKgEsAWkB/0QAAyoBQAEAAcoB6gH/AQYB4wH8Af8BAAHfAv8BAAHdAv8BAAHiAv8BEAGbAbUB/wEA
|
||||
AeQC/wEAAd0C/wEAAdwC/wETAfQC/wEAAd4B/QH/AUABaAFzAf8DKgFABAADVwG/AgABpwH/AgABswH/
|
||||
AmMBlQH/AvAB6QX/Al4B0wH/AgABtAH/Al4BxgH/AvwB8gH/AvkB8gH/AnUBsAH/AgABpAH/AgABlQH/
|
||||
AgABVgH/AV8CVQHqCAABGgFqARoB/wEaAWoBKgH/AQABWgEKAf8BxwHVAc8B/wEQAREBzgH/AgoB4AH/
|
||||
Ag8B2gH/AaIBowHhAf8C8AHyAf8C2AHzAf8COQHYAf8CAAHOAf8CAQG9Af8BMwE1AYEB/0gAA1cBvwEA
|
||||
AdQB8AH/AQUB6wL/AQAB4QL/AQAB7gL/ATIBQwFOAf8BAAHZAe4B/wEAAeEC/wEBAecC/wELAe0B/gH/
|
||||
AQQBygHiAf8BWQJXAb8IAAEtAS8BuAH/AgABtQH/AgABwgH/AgAByQH/AlgBkQH/AvEB6gX/AqIB6QP/
|
||||
AfsB/wL6AfMB/wJqAakB/wIAAboB/wIAAbIB/wIAAaIB/wIAAY0B/wFKAU0BUAH/CAABGgFyASoB/wEq
|
||||
AYEBOgH/ARoBagEqAf8BAAFaAQoB/wHIAdcB0AH/AiEB8wH/ApAB4AH/AswB4gH/AkwB2AH/AqQBzAH/
|
||||
AscB7AH/AikB4AH/AgkBwwH/AW8BcQGuAf9IAAMqAUABAAHOAecB/wEEAekB+wH/AQAB5gL/AQAB8QL/
|
||||
AVkBJwEzAf8BDAG1AcMB/wEAAeYC/wEOAfYC/wEAAeUB/AH/AT8BaQFxAf8DKgFACAABEAERAbsB/wIB
|
||||
AcMB/wIBAc8B/wIAAdEB/wIAAc0B/wJvAa0B/wL9AfoH/wH+Af8CggHCAf8CAAHEAf8CAAHEAf8CAAG+
|
||||
Af8CAAGuAf8CAAGkAf8BQgFFAU4B/wgAASoBgQEqAf8BSgGgAVoB/wEqAYEBOgH/ARoBagEqAf8BAAFa
|
||||
AQoB/wHLAdgB0gH/AooB1AH/AkUB4AH/AgQB8QH/AhgB4wH/AnEByQH/AjEB6QH/ATABMQHOAf8B0QHS
|
||||
AeMB/0wAA1cBvwEAAd8B8wH/AQMB8gL/AQAB2AHhAf8BTQERARsB/wEiAYgBmQH/AQAB8gL/ARAB9wL/
|
||||
AQMB0wHmAf8BWQJXAb8MAAELAQwBxAH/AgcB0QH/AggB3gH/AgAB2gH/AgAB1AH/AVYBVwHOAf8C/gH4
|
||||
B/8B/QH/AlsB2wH/AgABygH/AgABzAH/AgABygH/AgABuwH/AgABsgH/AUcBSgFVAf8IAAE6AYEBOgH/
|
||||
AVoBsAFqAf8BSgGgAVoB/wEqAYEBOgH/ARoBagEqAf8BCgFiARoB/wHLAdgB0gH/AnYB/gH/AmYB/gH/
|
||||
AlgC/wJJAfkB/wE+AT8B9QH/Aa8BsQHjAf9QAAMqAUABAAHXAeoB/wEGAfgC/wEAAZYBmgH/AS8BAAEG
|
||||
Af8BKQEyAUQB/wELA/8BAAHxAf4B/wE9AXEBdgH/AyoBQAwAASMBJAHSAf8CDwHgAf8CEQHvAf8CAQHp
|
||||
Af8CVwHTAf8C+gHvAf8C+wH1Af8CwwHUAf8BmAKPAfIE/wJeAeIB/wIAAdUB/wIEAdMB/wIDAcIB/wIC
|
||||
AbIB/wFjAWcBbAH/CAABOgGIAUoB/wFqAcABagH/AWoBwAFqAf8BSgGgAVoB/wEqAXIBOgH/AccB3gHM
|
||||
Af8BpwGoAfoB/wGAAYEB9wH/AncB/QH/AWQBZQH5Af8BgAGBAfgB/wHKAcsB9QH/WAADVwG/AQAB6wH2
|
||||
Af8BAwKBAf8BHgEAAQIB/wEtARsBJAH/AQwB/QL/AQEB4AHsAf8BWQJXAb8QAAFNAVAB2AH/AhsB7wH/
|
||||
Ah0B/gH/Al4B3QH/AvkB7QH/AvcB8AH/AnABuQH/AgAB4AH/AWIBYQGgAf8C8AHoBf8CYwHrAf8CBgHh
|
||||
Af8CCAHLAf8CCQGiAf8BRwJGAYAIAAFKAZABSgH/AWoBwAFqAf8BoAHYAbAB/wEqAXIBOgH/AcgB3wHM
|
||||
Af90AAMqAUABAAHiAewB/wEHAecB6gH/AQABZQFqAf8BEAK4Af8BAAH7Av8BNwGBAYIB/wE9AjwBZxAA
|
||||
AUcCRgGAAiMB9gH/AjEC/wKBAbkB/wLsAd0B/wJoAbgB/wIAAeoB/wIAAeYB/wIAAecB/wJVAZgB/wLf
|
||||
AcwB/wJqAcMB/wIRAe8B/wIQAdYB/wE4AToBlAH/DAABSgGYAVoB/wGgAdgBsAH/ASoBcgE6Af8ByQHg
|
||||
Ac0B/3wAA1cBvwEAAfAB9QH/AQMD/wERAf0C/wEAAesB8AH/AWQCUgHqGAABQgFEAe4B/wI/Av8CUQH+
|
||||
Af8CYAG9Af8CLgH+Af8CFAH+Af8CCQH5Af8CDgH8Af8CHgH8Af8CRgG7Af8CJgL/AiEB8gH/AhkBzAH/
|
||||
AzoBYgwAAVoBmAFaAf8BKgFyAToB/wHKAeABzgH/gAADKgFAAQAB6AHrAf8BLQP/AQYB/AH+Af8BMwKI
|
||||
Af8BRwJGAYAYAAMqAUABOgE7AfkB/wJaAv8CgQL/AogC/wJwAv8CWwL/AlkC/wJZAv8CSwL/AjYC/wEf
|
||||
ASAB7gH/AVkCVwG/EAABWgGYAVoB/wHLAeEBzwH/iAADVwG/AQUB/AH9Af8BAgLzAf8BWQJXAb8gAAMq
|
||||
AUABSwFNAfQB/wJeAv8CjgL/AqMC/wKeAv8ChwL/AmQC/wJEAv8BNAE1Ae0B/wMyAVEUAAHMAeIBzwH/
|
||||
jAADKgFAA1cBvwMqAUAsAAFHAkYBgAFpAWsB7wH/AWEBYgH4Af8CYgH+Af8CVwH5Af8BXAFfAfEB/wFH
|
||||
DgAAAk1TRnQBSQFMAgEBAwEAAUwBAAFMAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||
AwABEAMAAQEBAAEgBgABEBYAAyoBQAGMAWUBZwH/AYQBWQFaAf8BhQFZAVsB/wGFAVkBWwH/AYQBWgFb
|
||||
Af8BhAFZAVsB/wGEAVoBWwH/AYUBWQFbAf8BhQFaAVsB/wGFAVkBWwH/AYUBWQFbAf8BhAFZAVsB/wGL
|
||||
AVABTwH/AyoBQBAAAUcCRgGAAVIBVgFtAf8BIAEiAVQB/wEQAREBSwH/AQ4BDwFCAf8BFQEWATAB/wE4
|
||||
ATsBPAH/AVkCVwG/AyoBQCwAAaYBpwHEAf8BMgE0AXYB/wELAQwBYAH/AggBUwH/ASIBJAFPAf8BhgGI
|
||||
AZEB/0gAAyoBQAEGAbMB2wH/AQABrAHVAf8BAAGsAdYB/wEAAawB1gH/AQABrAHWAf8BAAGuAdkB/wEA
|
||||
AbkB5gH/AQABsAHdAf8BAAGtAdYB/wEAAawB1gH/AQABrAHWAf8BAAGsAdYB/wEAAbUB4gH/ATgBXgFw
|
||||
Af8BhgFLAUoB/wwAA1cBvwIFAXUB/wIAAYYB/wIAAYQB/wIAAYMB/wIAAYEB/wIAAYEB/wIAAWYB/wIA
|
||||
ASoB/wE8AT8BQAH/AyoBQCQAAY4BjwHHAf8CDQGRAf8CAAGQAf8CAAGSAf8CAAGOAf8CAAGDAf8CAwFZ
|
||||
Af8BagFrAYEB/0QAAUcCRgGAAQABugHkAf8BAAHOAfkB/wEAAc8B+gH/AQABzwH6Af8BAAHRAfsB/wEA
|
||||
AbMB0wH/ATUBLAE8Af8BXQGuAcoB/wEAAdQB+wH/AQABzwH6Af8BAAHPAfoB/wEAAdIB+wH/AQAByQH1
|
||||
Af8BGQGcAbkB/wFZAlcBvwgAA1cBvwIAAY8B/wIAAY0B/wIAAZEB/wIAAZQB/wIAAZUB/wIAAZIB/wIA
|
||||
AY0B/wIAAYUB/wIAAYEB/wIAAUYB/wEvATEBMgH/AyoBQAwAAcAB0AHJAf8MAAKvAdwB/wEPARABogH/
|
||||
AlUBuwH/AioBuAH/AgABqwH/AgsBqgH/AmYBwgH/Ag8BlgH/AQcBCAFdAf8BoQGiAagB/0AAAyoBQAEA
|
||||
AcIB6AH/AQIB2AH7Af8BAAHXAv8BAAHVAv8BAAHXAv8BAAFxAYkB/wEcAQABBAH/AUEBKwE9Af8BAAHj
|
||||
Av8BAAHVAv8BAAHUAv8BDQHoAv8BAAHUAfwB/wFDAVoBZwH/AyoBQAQAAVgCVwG/AgABlwH/AgABlgH/
|
||||
AiABqwH/AgABoQH/AgABpgH/AgABpgH/AgABowH/AgABnAH/Ah8BpAH/AgABiQH/AgABhQH/AgABQAH/
|
||||
AVEBVQFXAf8MAAEJAVkBCQH/AcIB0QHLAf8IAAFCAUMBvQH/AgQBsAH/AowBvQH/AsoB6QH/AkIBygH/
|
||||
AqYB2gH/AswB3gH/AiUBrAH/AgABiwH/AUYBSAFtAf9EAANXAb8BAAHOAfIB/wEFAeQC/wEAAdgC/wEA
|
||||
AdoC/wEAAdgB8gH/AQABcgGBAf8BAQGwAcgB/wEAAdwC/wEAAdkC/wEAAd8C/wEOAesC/wECAcMB5AH/
|
||||
AVkCVwG/BAADKgFAAgMBpgH/AgABogH/AVUBUQFjAeoC/wH7Af8CXAHOAf8CAAGvAf8CAAGxAf8CAAGv
|
||||
Af8CVwG6Bf8CTgG7Af8CAAGQAf8CAAGKAf8CDAElAf8BRwJGAYAIAAEJAWEBGQH/AQABWQEJAf8BxQHT
|
||||
Ac0B/wQAARABEQG7Af8CAAHIAf8CDAHCAf8CqgHQAf8C6QH5Af8C4QHuAf8CPwHBAf8CAAG9Af8CAAGo
|
||||
Af8BKQErAWgB/0QAAyoBQAEAAcoB6gH/AQUB4wH8Af8BAAHfAv8BAAHdAv8BAAHiAv8BDwGbAbUB/wEA
|
||||
AeQC/wEAAd0C/wEAAdwC/wESAfQC/wEAAd4B/QH/AT8BZwFyAf8DKgFABAADVwG/AgABpwH/AgABswH/
|
||||
AmIBlQH/AvAB6QX/Al0B0wH/AgABtAH/Al0BxgH/AvwB8gH/AvkB8gH/AnQBsAH/AgABpAH/AgABlQH/
|
||||
AgABVQH/AV4CVQHqCAABGQFpARkB/wEZAWkBKQH/AQABWQEJAf8BxwHVAc8B/wEPARABzgH/AgkB4AH/
|
||||
Ag4B2gH/AaIBowHhAf8C8AHyAf8C2AHzAf8COAHYAf8CAAHOAf8CAAG9Af8BMgE0AYEB/0gAA1cBvwEA
|
||||
AdQB8AH/AQQB6wL/AQAB4QL/AQAB7gL/ATEBQgFNAf8BAAHZAe4B/wEAAeEC/wEAAecC/wEKAe0B/gH/
|
||||
AQMBygHiAf8BWQJXAb8IAAEsAS4BuAH/AgABtQH/AgABwgH/AgAByQH/AlcBkQH/AvEB6gX/AqIB6QP/
|
||||
AfsB/wL6AfMB/wJpAakB/wIAAboB/wIAAbIB/wIAAaIB/wIAAY0B/wFJAUwBTwH/CAABGQFxASkB/wEp
|
||||
AYEBOQH/ARkBaQEpAf8BAAFZAQkB/wHIAdcB0AH/AiAB8wH/ApAB4AH/AswB4gH/AksB2AH/AqQBzAH/
|
||||
AscB7AH/AigB4AH/AggBwwH/AW4BcAGuAf9IAAMqAUABAAHOAecB/wEDAekB+wH/AQAB5gL/AQAB8QL/
|
||||
AVgBJgEyAf8BCwG1AcMB/wEAAeYC/wENAfYC/wEAAeUB/AH/AT4BaAFwAf8DKgFACAABDwEQAbsB/wIA
|
||||
AcMB/wIAAc8B/wIAAdEB/wIAAc0B/wJuAa0B/wL9AfoH/wH+Af8CggHCAf8CAAHEAf8CAAHEAf8CAAG+
|
||||
Af8CAAGuAf8CAAGkAf8BQQFEAU0B/wgAASkBgQEpAf8BSQGgAVkB/wEpAYEBOQH/ARkBaQEpAf8BAAFZ
|
||||
AQkB/wHLAdgB0gH/AooB1AH/AkQB4AH/AgMB8QH/AhcB4wH/AnAByQH/AjAB6QH/AS8BMAHOAf8B0QHS
|
||||
AeMB/0wAA1cBvwEAAd8B8wH/AQIB8gL/AQAB2AHhAf8BTAEQARoB/wEhAYgBmQH/AQAB8gL/AQ8B9wL/
|
||||
AQIB0wHmAf8BWQJXAb8MAAEKAQsBxAH/AgYB0QH/AgcB3gH/AgAB2gH/AgAB1AH/AVUBVgHOAf8C/gH4
|
||||
B/8B/QH/AloB2wH/AgABygH/AgABzAH/AgABygH/AgABuwH/AgABsgH/AUYBSQFUAf8IAAE5AYEBOQH/
|
||||
AVkBsAFpAf8BSQGgAVkB/wEpAYEBOQH/ARkBaQEpAf8BCQFhARkB/wHLAdgB0gH/AnUB/gH/AmUB/gH/
|
||||
AlcC/wJIAfkB/wE9AT4B9QH/Aa8BsQHjAf9QAAMqAUABAAHXAeoB/wEFAfgC/wEAAZYBmgH/AS4BAAEF
|
||||
Af8BKAExAUMB/wEKA/8BAAHxAf4B/wE8AXABdQH/AyoBQAwAASIBIwHSAf8CDgHgAf8CEAHvAf8CAAHp
|
||||
Af8CVgHTAf8C+gHvAf8C+wH1Af8CwwHUAf8BkgKLAfIE/wJdAeIB/wIAAdUB/wIDAdMB/wICAcIB/wIB
|
||||
AbIB/wFiAWYBawH/CAABOQGIAUkB/wFpAcABaQH/AWkBwAFpAf8BSQGgAVkB/wEpAXEBOQH/AccB3gHM
|
||||
Af8BpwGoAfoB/wGAAYEB9wH/AnYB/QH/AWMBZAH5Af8BgAGBAfgB/wHKAcsB9QH/WAADVwG/AQAB6wH2
|
||||
Af8BAgKBAf8BHQEAAQEB/wEsARoBIwH/AQsB/QL/AQAB4AHsAf8BWQJXAb8QAAFMAU8B2AH/AhoB7wH/
|
||||
AhwB/gH/Al0B3QH/AvkB7QH/AvcB8AH/Am8BuQH/AgAB4AH/AWEBYAGgAf8C8AHoBf8CYgHrAf8CBQHh
|
||||
Af8CBwHLAf8CCAGiAf8BRwJGAYAIAAFJAZABSQH/AWkBwAFpAf8BoAHYAbAB/wEpAXEBOQH/AcgB3wHM
|
||||
Af90AAMqAUABAAHiAewB/wEGAecB6gH/AQABZAFpAf8BDwK4Af8BAAH7Av8BNgGBAYIB/wE9AjwBZxAA
|
||||
AUcCRgGAAiIB9gH/AjAC/wKBAbkB/wLsAd0B/wJnAbgB/wIAAeoB/wIAAeYB/wIAAecB/wJUAZgB/wLf
|
||||
AcwB/wJpAcMB/wIQAe8B/wIPAdYB/wE3ATkBlAH/DAABSQGYAVkB/wGgAdgBsAH/ASkBcQE5Af8ByQHg
|
||||
Ac0B/3wAA1cBvwEAAfAB9QH/AQID/wEQAf0C/wEAAesB8AH/AWMCUwHqGAABQQFDAe4B/wI+Av8CUAH+
|
||||
Af8CXwG9Af8CLQH+Af8CEwH+Af8CCAH5Af8CDQH8Af8CHQH8Af8CRQG7Af8CJQL/AiAB8gH/AhgBzAH/
|
||||
AzoBYgwAAVkBmAFZAf8BKQFxATkB/wHKAeABzgH/gAADKgFAAQAB6AHrAf8BLAP/AQUB/AH+Af8BMgKI
|
||||
Af8BRwJGAYAYAAMqAUABOQE6AfkB/wJZAv8CgQL/AogC/wJvAv8CWgL/AlgC/wJYAv8CSgL/AjUC/wEe
|
||||
AR8B7gH/AVkCVwG/EAABWQGYAVkB/wHLAeEBzwH/iAADVwG/AQQB/AH9Af8BAQLzAf8BWQJXAb8gAAMq
|
||||
AUABSgFMAfQB/wJdAv8CjgL/AqMC/wKeAv8ChwL/AmMC/wJDAv8BMwE0Ae0B/wMyAVEUAAHMAeIBzwH/
|
||||
jAADKgFAA1cBvwMqAUAsAAFHAkYBgAFoAWoB7wH/AWABYQH4Af8CYQH+Af8CVgH5Af8BWwFeAfEB/wFH
|
||||
AkYBgAMqAUCQAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AQABgAEAAfABBwH/
|
||||
AQMEAAHgAQMB/gEBBAABwAEBAdwFAAGAAQEBzAMAAYABAQIAAcQDAAGAAQECAAHAAwABwAEDAgABwAMA
|
||||
AcABAwIAAcADAAHgAQcCAAHAAQECAAHgAQcCAAHAAQMCAAHwAQ8CAAHBAf8CAAHwAQ8BAAEBAcMB/wIA
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ namespace VisualPascalABC
|
|||
this.mCOPYToolStripMenuItem,
|
||||
this.mSELECTALLToolStripMenuItem});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(155, 70);
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(155, 48);
|
||||
//
|
||||
// mCOPYToolStripMenuItem
|
||||
//
|
||||
|
|
@ -228,8 +228,7 @@ namespace VisualPascalABC
|
|||
this.panel3.ResumeLayout(false);
|
||||
this.panel3.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.outputTextBox.KeyUp += OutputTextBox_KeyUp;
|
||||
this.InputTextBox.KeyUp += InputTextBox_KeyUp;
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
|
|
|||
|
|
@ -73,6 +73,9 @@
|
|||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Debugger.Core">
|
||||
<HintPath>..\Libraries\Debugger.Core.dll</HintPath>
|
||||
|
|
@ -532,6 +535,9 @@
|
|||
<EmbeddedResource Include="FormsDesignerBinding\FormsDesigner\Resources\ConfigureSidebarDialog.xfrm" />
|
||||
<EmbeddedResource Include="FormsDesignerBinding\FormsDesigner\Resources\RenameSidebarCategoryDialog.xfrm" />
|
||||
<EmbeddedResource Include="FormsDesignerBinding\FormsDesigner\Resources\WindowsFormsGeneralOptions.xfrm" />
|
||||
<None Include="app.manifest">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,13 @@
|
|||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> <runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
|
||||
|
||||
<System.Windows.Forms.ApplicationConfigurationSection>
|
||||
<add key="DpiAwareness" value="PerMonitorV2" />
|
||||
<add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
|
||||
</System.Windows.Forms.ApplicationConfigurationSection>
|
||||
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="ICSharpCode.NRefactory" publicKeyToken="EFE927ACF176EEA2" culture="neutral"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue