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

This commit is contained in:
Бондарев Иван 2020-05-26 20:09:08 +02:00
commit 76a7e8e4cf
7 changed files with 24 additions and 20 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "6";
public const string Build = "3";
public const string Revision = "2486";
public const string Revision = "2487";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=3
%REVISION%=2486
%MINOR%=6
%REVISION%=2487
%COREVERSION%=3
%MAJOR%=3

View file

@ -1 +1 @@
3.6.3.2486
3.6.3.2487

View file

@ -1 +1 @@
!define VERSION '3.6.3.2486'
!define VERSION '3.6.3.2487'

View file

@ -42,8 +42,9 @@ type
GPen = System.Windows.Media.Pen;
/// Тип точки
Point = System.Windows.Point;
/// Тип точки
/// Тип вектора
GPoint = System.Windows.Point;
Vector = System.Windows.Vector;
GBrush = System.Windows.Media.Brush;
/// Тип стиля шрифта
FontStyle = (Normal,Bold,Italic,BoldItalic);
@ -236,7 +237,7 @@ type
//>> Класс Vector # Vector class
// -----------------------------------------------------
/// Класс Vector
Vector = class
{Vector = class
public
x,y: real;
/// Создаёт вектор с указанными координатами
@ -246,9 +247,7 @@ type
static function operator*(r: real; v: Vector): Vector := new Vector(r*v.x,r*v.y);
static function operator+(v: Vector; p: Point): Point := new Point(p.x+v.x,p.y+v.y);
static function operator+(p: Point; v: Vector): Point := new Point(p.x+v.x,p.y+v.y);
//static function operator implicit(t: (real,real)): Vector := new Vector(t[0],t[1]);
//static function operator implicit(t: (integer,integer)): Vector := new Vector(t[0],t[1]);
end;
end;}
//{{{--doc: Конец секции 2 }}}

View file

@ -58,6 +58,8 @@ namespace PascalABCCompiler.TreeConverter
initialValue = tmp;
statements_list head_stmts = new statements_list(loopVariableLocation);
convertion_data_and_alghoritms.statement_list_stack_push(head_stmts);
var early_init_loop_variable = false; // SSM 25/05/16
if (_for_node.type_name == null && !_for_node.create_loop_variable)
{
definition_node dn = context.check_name_node_type(_for_node.loop_variable.name, loopVariableLocation,
@ -83,6 +85,7 @@ namespace PascalABCCompiler.TreeConverter
check_for_type_allowed(tn, get_location(_for_node.type_name));
vdn = context.add_var_definition(_for_node.loop_variable.name, get_location(_for_node.loop_variable), tn, initialValue/*, polymorphic_state.ps_common*/);
vdn.polymorphic_state = polymorphic_state.ps_common;
early_init_loop_variable = true; // SSM 25/05/16
}
internal_interface ii = vdn.type.get_internal_interface(internal_interface_kind.ordinal_interface);
if (ii == null)
@ -103,11 +106,14 @@ namespace PascalABCCompiler.TreeConverter
res = find_operator(compiler_string_consts.assign_name, left, right, finishValueLocation);
head_stmts.statements.AddElement(res);
left = create_variable_reference(vdn, loopVariableLocation);
right = initialValue;
res = find_operator(compiler_string_consts.assign_name, left, right, loopVariableLocation);
head_stmts.statements.AddElement(res);
if (!early_init_loop_variable) // SSM 25/05/16 - for var i := f1() to f2() do без этой правки дважды вызывал f1()
{
left = create_variable_reference(vdn, loopVariableLocation);
right = initialValue;
res = find_operator(compiler_string_consts.assign_name, left, right, loopVariableLocation);
head_stmts.statements.AddElement(res);
}
location initialValueLocation = get_location(_for_node.initial_value);

View file

@ -42,8 +42,9 @@ type
GPen = System.Windows.Media.Pen;
/// Тип точки
Point = System.Windows.Point;
/// Тип точки
/// Тип вектора
GPoint = System.Windows.Point;
Vector = System.Windows.Vector;
GBrush = System.Windows.Media.Brush;
/// Тип стиля шрифта
FontStyle = (Normal,Bold,Italic,BoldItalic);
@ -236,7 +237,7 @@ type
//>> Класс Vector # Vector class
// -----------------------------------------------------
/// Класс Vector
Vector = class
{Vector = class
public
x,y: real;
/// Создаёт вектор с указанными координатами
@ -246,9 +247,7 @@ type
static function operator*(r: real; v: Vector): Vector := new Vector(r*v.x,r*v.y);
static function operator+(v: Vector; p: Point): Point := new Point(p.x+v.x,p.y+v.y);
static function operator+(p: Point; v: Vector): Point := new Point(p.x+v.x,p.y+v.y);
//static function operator implicit(t: (real,real)): Vector := new Vector(t[0],t[1]);
//static function operator implicit(t: (integer,integer)): Vector := new Vector(t[0],t[1]);
end;
end;}
//{{{--doc: Конец секции 2 }}}