Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet
This commit is contained in:
commit
d163ae2f23
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
|||
public const string Major = "3";
|
||||
public const string Minor = "9";
|
||||
public const string Build = "0";
|
||||
public const string Revision = "3376";
|
||||
public const string Revision = "3377";
|
||||
|
||||
public const string MainVersion = Major + "." + Minor;
|
||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%COREVERSION%=0
|
||||
%REVISION%=3376
|
||||
%MINOR%=9
|
||||
%REVISION%=3377
|
||||
%COREVERSION%=0
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
3.9.0.3376
|
||||
3.9.0.3377
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.9.0.3376'
|
||||
!define VERSION '3.9.0.3377'
|
||||
|
|
|
|||
|
|
@ -1307,6 +1307,11 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
{
|
||||
DefaultVisit(_lambda_any_type_node_syntax);
|
||||
}
|
||||
|
||||
public virtual void visit(ref_var_def_statement _ref_var_def_statement)
|
||||
{
|
||||
DefaultVisit(_ref_var_def_statement);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2085,6 +2085,14 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
{
|
||||
}
|
||||
|
||||
public virtual void pre_do_visit(ref_var_def_statement _ref_var_def_statement)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void post_do_visit(ref_var_def_statement _ref_var_def_statement)
|
||||
{
|
||||
}
|
||||
|
||||
public override void visit(expression _expression)
|
||||
{
|
||||
DefaultVisit(_expression);
|
||||
|
|
@ -4308,6 +4316,15 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
pre_do_visit(_lambda_any_type_node_syntax);
|
||||
post_do_visit(_lambda_any_type_node_syntax);
|
||||
}
|
||||
|
||||
public override void visit(ref_var_def_statement _ref_var_def_statement)
|
||||
{
|
||||
DefaultVisit(_ref_var_def_statement);
|
||||
pre_do_visit(_ref_var_def_statement);
|
||||
visit(ref_var_def_statement.var);
|
||||
visit(ref_var_def_statement.initial_value);
|
||||
post_do_visit(_ref_var_def_statement);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -540,6 +540,8 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
return new expression_with_let();
|
||||
case 259:
|
||||
return new lambda_any_type_node_syntax();
|
||||
case 260:
|
||||
return new ref_var_def_statement();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
@ -4532,6 +4534,19 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
read_expression(_lambda_any_type_node_syntax);
|
||||
}
|
||||
|
||||
|
||||
public void visit(ref_var_def_statement _ref_var_def_statement)
|
||||
{
|
||||
read_ref_var_def_statement(_ref_var_def_statement);
|
||||
}
|
||||
|
||||
public void read_ref_var_def_statement(ref_var_def_statement _ref_var_def_statement)
|
||||
{
|
||||
read_declaration(_ref_var_def_statement);
|
||||
_ref_var_def_statement.var = _read_node() as ident;
|
||||
_ref_var_def_statement.initial_value = _read_node() as addressed_value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -7113,6 +7113,36 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
write_expression(_lambda_any_type_node_syntax);
|
||||
}
|
||||
|
||||
|
||||
public void visit(ref_var_def_statement _ref_var_def_statement)
|
||||
{
|
||||
bw.Write((Int16)260);
|
||||
write_ref_var_def_statement(_ref_var_def_statement);
|
||||
}
|
||||
|
||||
public void write_ref_var_def_statement(ref_var_def_statement _ref_var_def_statement)
|
||||
{
|
||||
write_declaration(_ref_var_def_statement);
|
||||
if (_ref_var_def_statement.var == null)
|
||||
{
|
||||
bw.Write((byte)0);
|
||||
}
|
||||
else
|
||||
{
|
||||
bw.Write((byte)1);
|
||||
_ref_var_def_statement.var.visit(this);
|
||||
}
|
||||
if (_ref_var_def_statement.initial_value == null)
|
||||
{
|
||||
bw.Write((byte)0);
|
||||
}
|
||||
else
|
||||
{
|
||||
bw.Write((byte)1);
|
||||
_ref_var_def_statement.initial_value.visit(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -55517,6 +55517,196 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
}
|
||||
|
||||
|
||||
///<summary>
|
||||
///Для конструкции refvar id := ref addrValue, которая не имеет аналога в языке и генерируется при развертывании кортежного присваивания в конструкции (a,a[i]) := (b,666);
|
||||
///</summary>
|
||||
[Serializable]
|
||||
public partial class ref_var_def_statement : declaration
|
||||
{
|
||||
|
||||
///<summary>
|
||||
///Конструктор без параметров.
|
||||
///</summary>
|
||||
public ref_var_def_statement()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Конструктор с параметрами.
|
||||
///</summary>
|
||||
public ref_var_def_statement(ident _var,addressed_value _initial_value)
|
||||
{
|
||||
this._var=_var;
|
||||
this._initial_value=_initial_value;
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Конструктор с параметрами.
|
||||
///</summary>
|
||||
public ref_var_def_statement(ident _var,addressed_value _initial_value,SourceContext sc)
|
||||
{
|
||||
this._var=_var;
|
||||
this._initial_value=_initial_value;
|
||||
source_context = sc;
|
||||
FillParentsInDirectChilds();
|
||||
}
|
||||
protected ident _var;
|
||||
protected addressed_value _initial_value;
|
||||
|
||||
///<summary>
|
||||
///ref var id := ref add_value
|
||||
///</summary>
|
||||
public ident var
|
||||
{
|
||||
get
|
||||
{
|
||||
return _var;
|
||||
}
|
||||
set
|
||||
{
|
||||
_var=value;
|
||||
if (_var != null)
|
||||
_var.Parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///
|
||||
///</summary>
|
||||
public addressed_value initial_value
|
||||
{
|
||||
get
|
||||
{
|
||||
return _initial_value;
|
||||
}
|
||||
set
|
||||
{
|
||||
_initial_value=value;
|
||||
if (_initial_value != null)
|
||||
_initial_value.Parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary> Создает копию узла </summary>
|
||||
public override syntax_tree_node Clone()
|
||||
{
|
||||
ref_var_def_statement copy = new ref_var_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 (var != null)
|
||||
{
|
||||
copy.var = (ident)var.Clone();
|
||||
copy.var.Parent = copy;
|
||||
}
|
||||
if (initial_value != null)
|
||||
{
|
||||
copy.initial_value = (addressed_value)initial_value.Clone();
|
||||
copy.initial_value.Parent = copy;
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
/// <summary> Получает копию данного узла корректного типа </summary>
|
||||
public new ref_var_def_statement TypedClone()
|
||||
{
|
||||
return Clone() as ref_var_def_statement;
|
||||
}
|
||||
|
||||
///<summary> Заполняет поля Parent в непосредственных дочерних узлах </summary>
|
||||
public override void FillParentsInDirectChilds()
|
||||
{
|
||||
if (attributes != null)
|
||||
attributes.Parent = this;
|
||||
if (var != null)
|
||||
var.Parent = this;
|
||||
if (initial_value != null)
|
||||
initial_value.Parent = this;
|
||||
}
|
||||
|
||||
///<summary> Заполняет поля Parent во всем поддереве </summary>
|
||||
public override void FillParentsInAllChilds()
|
||||
{
|
||||
FillParentsInDirectChilds();
|
||||
attributes?.FillParentsInAllChilds();
|
||||
var?.FillParentsInAllChilds();
|
||||
initial_value?.FillParentsInAllChilds();
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Свойство для получения количества всех подузлов без элементов поля типа List
|
||||
///</summary>
|
||||
public override Int32 subnodes_without_list_elements_count
|
||||
{
|
||||
get
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
///<summary>
|
||||
///Свойство для получения количества всех подузлов. Подузлом также считается каждый элемент поля типа List
|
||||
///</summary>
|
||||
public override Int32 subnodes_count
|
||||
{
|
||||
get
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
///<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 var;
|
||||
case 1:
|
||||
return initial_value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
set
|
||||
{
|
||||
if(subnodes_count == 0 || ind < 0 || ind > subnodes_count-1)
|
||||
throw new IndexOutOfRangeException();
|
||||
switch(ind)
|
||||
{
|
||||
case 0:
|
||||
var = (ident)value;
|
||||
break;
|
||||
case 1:
|
||||
initial_value = (addressed_value)value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
///<summary>
|
||||
///Метод для обхода дерева посетителем
|
||||
///</summary>
|
||||
///<param name="visitor">Объект-посетитель.</param>
|
||||
///<returns>Return value is void</returns>
|
||||
public override void visit(IVisitor visitor)
|
||||
{
|
||||
visitor.visit(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1564,6 +1564,12 @@ namespace PascalABCCompiler.SyntaxTree
|
|||
///<param name="_lambda_any_type_node_syntax">Node to visit</param>
|
||||
///<returns> Return value is void </returns>
|
||||
void visit(lambda_any_type_node_syntax _lambda_any_type_node_syntax);
|
||||
///<summary>
|
||||
///Method to visit ref_var_def_statement.
|
||||
///</summary>
|
||||
///<param name="_ref_var_def_statement">Node to visit</param>
|
||||
///<returns> Return value is void </returns>
|
||||
void visit(ref_var_def_statement _ref_var_def_statement);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3346,6 +3346,17 @@
|
|||
<TagIndices />
|
||||
</Tags>
|
||||
</SyntaxNode>
|
||||
<SyntaxNode Name="ref_var_def_statement" BaseName="declaration">
|
||||
<Fields>
|
||||
<SyntaxField Name="var" SyntaxType="ident" />
|
||||
<SyntaxField Name="initial_value" SyntaxType="addressed_value" />
|
||||
</Fields>
|
||||
<Methods />
|
||||
<Tags>
|
||||
<CategoryIndices />
|
||||
<TagIndices />
|
||||
</Tags>
|
||||
</SyntaxNode>
|
||||
</SyntaxNodes>
|
||||
<Settings>
|
||||
<FileName>Tree.cs</FileName>
|
||||
|
|
@ -3419,6 +3430,7 @@
|
|||
<HelpData Key=".in_what" Value="" />
|
||||
<HelpData Key=".index" Value="" />
|
||||
<HelpData Key=".index_expr" Value="" />
|
||||
<HelpData Key=".initial_value" Value="ссылка на addrvalue, которой интциализируется идентификатор" />
|
||||
<HelpData Key=".inverted" Value="" />
|
||||
<HelpData Key=".item_expression" Value="" />
|
||||
<HelpData Key=".left" Value="" />
|
||||
|
|
@ -3468,6 +3480,7 @@
|
|||
<HelpData Key=".v" Value="" />
|
||||
<HelpData Key=".val" Value="" />
|
||||
<HelpData Key=".value" Value="" />
|
||||
<HelpData Key=".var" Value="" />
|
||||
<HelpData Key=".var_attr" Value="" />
|
||||
<HelpData Key=".variants" Value="" />
|
||||
<HelpData Key=".vars" Value="" />
|
||||
|
|
@ -4460,6 +4473,9 @@
|
|||
<HelpData Key="recursive_tuple_parameter" Value="Рекурсивный паттерн-параметр." />
|
||||
<HelpData Key="ref_type" Value="" />
|
||||
<HelpData Key="ref_type.pointed_to" Value="" />
|
||||
<HelpData Key="ref_var_def_statement" Value="Для конструкции refvar id := ref addrValue, которая не имеет аналога в языке и генерируется при развертывании кортежного присваивания в конструкции (a,a[i]) := (b,666);" />
|
||||
<HelpData Key="ref_var_def_statement.initial_value" Value="" />
|
||||
<HelpData Key="ref_var_def_statement.var" Value="ref var id := ref add_value" />
|
||||
<HelpData Key="repeat_node" Value="Цикл с постусловием (repeat)" />
|
||||
<HelpData Key="repeat_node.expr" Value="Условие завершения цикла" />
|
||||
<HelpData Key="repeat_node.statements" Value="Тело цикла" />
|
||||
|
|
|
|||
|
|
@ -361,6 +361,10 @@ procedure FillRectangle(x,y,w,h: real; c: Color);
|
|||
procedure Arc(x, y, r, angle1, angle2: real);
|
||||
/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенную между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
|
||||
procedure Arc(x, y, r, angle1, angle2: real; c: Color);
|
||||
/// Рисует дугу окружности с центром в точке p и радиусом r, заключенную между двумя лучами, образующими углы angle1 и angle2 с осью OX
|
||||
procedure Arc(p: Point; r, angle1, angle2: real);
|
||||
/// Рисует дугу окружности с центром в точке p и радиусом r, заключенную между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
|
||||
procedure Arc(p: Point; r, angle1, angle2: real; c: Color);
|
||||
|
||||
/// Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенный между двумя лучами, образующими углы angle1 и angle2 с осью OX
|
||||
procedure Sector(x, y, r, angle1, angle2: real);
|
||||
|
|
@ -1528,6 +1532,8 @@ procedure FillRectangle(x,y,w,h: real; c: GColor) := InvokeVisual(FillRectangleP
|
|||
/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы angle1 и angle2 с осью OX (angle1 и angle2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)
|
||||
procedure Arc(x, y, r, angle1, angle2: real) := InvokeVisual(ArcP,x, y, r, angle1, angle2);
|
||||
procedure Arc(x, y, r, angle1, angle2: real; c: GColor) := InvokeVisual(ArcPC,x, y, r, angle1, angle2, c);
|
||||
procedure Arc(p: Point; r, angle1, angle2: real) := Arc(p.x, p.y, r, angle1, angle2);
|
||||
procedure Arc(p: Point; r, angle1, angle2: real; c: Color) := Arc(p.x, p.y, r, angle1, angle2, c);
|
||||
|
||||
/// Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы angle1 и angle2 с осью OX (angle1 и angle2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)
|
||||
procedure Sector(x, y, r, angle1, angle2: real) := InvokeVisual(SectorP,x, y, r, angle1, angle2);
|
||||
|
|
|
|||
|
|
@ -9996,6 +9996,10 @@ begin
|
|||
Result := Self
|
||||
end;
|
||||
|
||||
/// Преобразует последовательность последовательностей в плоскую последовательность
|
||||
function Flatten<T>(Self: sequence of sequence of T): sequence of T; extensionmethod
|
||||
:= Self.SelectMany(x -> x);
|
||||
|
||||
/// Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя delim в качестве разделителя
|
||||
function JoinToString<T>(Self: sequence of T; delim: string): string; extensionmethod;
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -1141,19 +1141,19 @@
|
|||
<member name="M:TypedFileRead(PABCSystem.TypedFile)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:FilePos(PABCSystem.BinaryFile)">
|
||||
<member name="M:FilePos(@file)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:FileSize(PABCSystem.BinaryFile)">
|
||||
<member name="M:FileSize(@file)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:Seek(PABCSystem.BinaryFile,System.Int64)">
|
||||
<member name="M:Seek(@file,System.Int64)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:BinaryFileInit(PABCSystem.BinaryFile@)">
|
||||
<member name="M:BinaryFileInit(@file@)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:BinaryFileRead(PABCSystem.BinaryFile@,System.Type)">
|
||||
<member name="M:BinaryFileRead(@file@,System.Type)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:PascalABCVersion">
|
||||
|
|
|
|||
Loading…
Reference in a new issue