This commit is contained in:
Mikhalkovich Stanislav 2018-12-06 21:14:33 +03:00
parent 7364b10b3f
commit 753f4f219e
26 changed files with 3673 additions and 2812 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 = "1887";
public const string Revision = "1888";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=2
%REVISION%=1887
%MINOR%=4
%REVISION%=1888
%COREVERSION%=2
%MAJOR%=3

Binary file not shown.

View file

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

View file

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

View file

@ -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" />

View file

@ -236,5 +236,6 @@ script=

View file

@ -1 +1 @@
!define VERSION '3.4.2.1887'
!define VERSION '3.4.2.1888'

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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&lt;syntax_tree_node&gt;" 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="" />

View file

@ -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)
{

View file

@ -0,0 +1,8 @@
var
i: integer;
j: integer;
(x,y) := (2,3);
begin
end.

View file

@ -0,0 +1,8 @@
var
(x,y) := (2,3);
i: integer;
j: integer;
begin
end.

View file

@ -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(); // обязательно очистить - этот узел в семантику ничего не должен приносить!
}

View file

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

View file

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

View file

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

View file

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

View file

@ -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"/>