var (a,b) := (1,2)
This commit is contained in:
miks1965 2017-06-01 13:14:49 +03:00
parent ecf1cd2955
commit 38842c45e7
23 changed files with 1810 additions and 1833 deletions

View file

@ -2828,13 +2828,13 @@ namespace CodeFormatters
public override void visit(assign_var_tuple _assign_var_tuple)
{
read_from_beg_pos = true;
for (int i = 0; i < _assign_var_tuple.vars.variables.Count; i++)
for (int i = 0; i < _assign_var_tuple.idents.idents.Count; i++)
{
if (options.SpaceBetweenArguments == 1)
{
add_space_after = true;
}
visit_node(_assign_var_tuple.vars.variables[i]);
visit_node(_assign_var_tuple.idents.idents[i]);
add_space_before = true;
}
visit_node(_assign_var_tuple.expr);

View file

@ -4507,9 +4507,9 @@ namespace CodeCompletion
TypeScope ts = returned_scope as TypeScope;
if (ts != null && ts.instances != null && ts.instances.Count > 0)
{
for (int i = 0; i < _assign_var_tuple.vars.variables.Count; i++)
for (int i = 0; i < _assign_var_tuple.idents.idents.Count; i++)
{
ident id = _assign_var_tuple.vars.variables[i] as ident;
ident id = _assign_var_tuple.idents.idents[i];
if (id != null)
{
SymInfo si = new SymInfo(id.name, SymbolKind.Variable, id.name);

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "2";
public const string Build = "0";
public const string Revision = "1457";
public const string Revision = "1463";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=0
%REVISION%=1457
%REVISION%=1463
%MINOR%=2
%MAJOR%=3

View file

@ -2,7 +2,7 @@
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: DESKTOP-8EAQPI9
// DateTime: 31.05.2017 22:24:31
// DateTime: 01.06.2017 11:45:28
// UserName: ?????????
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>

View file

@ -168,7 +168,7 @@
%type <ex> func_decl_lambda expl_func_decl_lambda
%type <td> lambda_type_ref lambda_type_ref_noproctype
%type <stn> full_lambda_fp_list lambda_simple_fp_sect lambda_function_body lambda_procedure_body optional_full_lambda_fp_list
%type <ob> field_in_unnamed_object list_fields_in_unnamed_object func_class_name_ident_list rem_lambda variable_list var_variable_list
%type <ob> field_in_unnamed_object list_fields_in_unnamed_object func_class_name_ident_list rem_lambda variable_list var_ident_list
%type <ti> tkAssignOrEqual
%%
@ -2310,18 +2310,22 @@ assignment
($4 as addressed_value_list).source_context = LexLocation.MergeAll(@1,@2,@3,@4,@5);
$$ = new assign_tuple($4 as addressed_value_list, $7, @$);
}
| tkRoundOpen tkVar variable tkComma var_variable_list tkRoundClose assign_operator expr
| tkRoundOpen tkVar identifier tkComma var_ident_list tkRoundClose assign_operator expr
{
if ($7.type != Operators.Assignment)
parsertools.AddErrorFromResource("ONLY_BASE_ASSIGNMENT_FOR_TUPLE",@6);
($5 as addressed_value_list).variables.Insert(0,$3 as addressed_value);
($5 as addressed_value_list).source_context = LexLocation.MergeAll(@1,@2,@3,@4,@5,@6);
$$ = new assign_var_tuple($5 as addressed_value_list, $8, @$);
($5 as ident_list).idents.Insert(0,$3);
($5 as ident_list).source_context = LexLocation.MergeAll(@1,@2,@3,@4,@5,@6);
$$ = new assign_var_tuple($5 as ident_list, $8, @$);
}
/* | tkVar tkRoundOpen variable tkComma variable_list tkRoundClose assign_operator expr
{
}*/
| tkVar tkRoundOpen identifier tkComma ident_list tkRoundClose assign_operator expr
{
if ($7.type != Operators.Assignment)
parsertools.AddErrorFromResource("ONLY_BASE_ASSIGNMENT_FOR_TUPLE",@6);
($5 as ident_list).idents.Insert(0,$3);
($5 as ident_list).source_context = LexLocation.MergeAll(@1,@2,@3,@4,@5,@6);
$$ = new assign_var_tuple($5 as ident_list, $8, @$);
}
;
variable_list
@ -2337,15 +2341,15 @@ variable_list
}
;
var_variable_list
: tkVar variable
var_ident_list
: tkVar identifier
{
$$ = new addressed_value_list($2 as addressed_value,@$);
$$ = new ident_list($2,@$);
}
| var_variable_list tkComma tkVar variable
| var_ident_list tkComma tkVar identifier
{
($1 as addressed_value_list).Add($4 as addressed_value);
($1 as addressed_value_list).source_context = LexLocation.MergeAll(@1,@2,@3,@4);
($1 as ident_list).Add($4);
($1 as ident_list).source_context = LexLocation.MergeAll(@1,@2,@3,@4);
$$ = $1;
}
;

File diff suppressed because it is too large Load diff

View file

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

View file

@ -1 +1 @@
!define VERSION '3.2.0.1457'
!define VERSION '3.2.0.1463'

View file

@ -3629,6 +3629,8 @@ namespace PascalABCCompiler.SyntaxTree
{
DefaultVisit(_assign_var_tuple);
pre_do_visit(_assign_var_tuple);
visit(assign_var_tuple.idents);
visit(assign_var_tuple.expr);
post_do_visit(_assign_var_tuple);
}

View file

@ -3836,7 +3836,9 @@ namespace PascalABCCompiler.SyntaxTree
public void read_assign_var_tuple(assign_var_tuple _assign_var_tuple)
{
read_assign_tuple(_assign_var_tuple);
read_statement(_assign_var_tuple);
_assign_var_tuple.idents = _read_node() as ident_list;
_assign_var_tuple.expr = _read_node() as expression;
}

View file

@ -5988,7 +5988,25 @@ namespace PascalABCCompiler.SyntaxTree
public void write_assign_var_tuple(assign_var_tuple _assign_var_tuple)
{
write_assign_tuple(_assign_var_tuple);
write_statement(_assign_var_tuple);
if (_assign_var_tuple.idents == null)
{
bw.Write((byte)0);
}
else
{
bw.Write((byte)1);
_assign_var_tuple.idents.visit(this);
}
if (_assign_var_tuple.expr == null)
{
bw.Write((byte)0);
}
else
{
bw.Write((byte)1);
_assign_var_tuple.expr.visit(this);
}
}

View file

@ -44109,7 +44109,7 @@ namespace PascalABCCompiler.SyntaxTree
///
///</summary>
[Serializable]
public partial class assign_var_tuple : assign_tuple
public partial class assign_var_tuple : statement
{
///<summary>
@ -44120,13 +44120,12 @@ namespace PascalABCCompiler.SyntaxTree
}
///<summary>
///Конструктор с параметрами.
///</summary>
public assign_var_tuple(addressed_value_list _vars,expression _expr)
public assign_var_tuple(ident_list _idents,expression _expr)
{
this._vars=_vars;
this._idents=_idents;
this._expr=_expr;
FillParentsInDirectChilds();
}
@ -44134,13 +44133,47 @@ namespace PascalABCCompiler.SyntaxTree
///<summary>
///Конструктор с параметрами.
///</summary>
public assign_var_tuple(addressed_value_list _vars,expression _expr,SourceContext sc)
public assign_var_tuple(ident_list _idents,expression _expr,SourceContext sc)
{
this._vars=_vars;
this._idents=_idents;
this._expr=_expr;
source_context = sc;
FillParentsInDirectChilds();
}
protected ident_list _idents;
protected expression _expr;
///<summary>
///
///</summary>
public ident_list idents
{
get
{
return _idents;
}
set
{
_idents=value;
}
}
///<summary>
///
///</summary>
public expression expr
{
get
{
return _expr;
}
set
{
_expr=value;
}
}
/// <summary> Создает копию узла </summary>
public override syntax_tree_node Clone()
{
@ -44153,10 +44186,10 @@ namespace PascalABCCompiler.SyntaxTree
copy.attributes = (attribute_list)attributes.Clone();
copy.attributes.Parent = copy;
}
if (vars != null)
if (idents != null)
{
copy.vars = (addressed_value_list)vars.Clone();
copy.vars.Parent = copy;
copy.idents = (ident_list)idents.Clone();
copy.idents.Parent = copy;
}
if (expr != null)
{
@ -44177,8 +44210,8 @@ namespace PascalABCCompiler.SyntaxTree
{
if (attributes != null)
attributes.Parent = this;
if (vars != null)
vars.Parent = this;
if (idents != null)
idents.Parent = this;
if (expr != null)
expr.Parent = this;
}
@ -44188,7 +44221,7 @@ namespace PascalABCCompiler.SyntaxTree
{
FillParentsInDirectChilds();
attributes?.FillParentsInAllChilds();
vars?.FillParentsInAllChilds();
idents?.FillParentsInAllChilds();
expr?.FillParentsInAllChilds();
}
@ -44224,7 +44257,7 @@ namespace PascalABCCompiler.SyntaxTree
switch(ind)
{
case 0:
return vars;
return idents;
case 1:
return expr;
}
@ -44237,7 +44270,7 @@ namespace PascalABCCompiler.SyntaxTree
switch(ind)
{
case 0:
vars = (addressed_value_list)value;
idents = (ident_list)value;
break;
case 1:
expr = (expression)value;

View file

@ -2790,8 +2790,11 @@
<TagIndices />
</Tags>
</SyntaxNode>
<SyntaxNode Name="assign_var_tuple" BaseName="assign_tuple">
<Fields />
<SyntaxNode Name="assign_var_tuple" BaseName="statement">
<Fields>
<SyntaxField Name="idents" SyntaxType="ident_list" />
<SyntaxField Name="expr" SyntaxType="expression" />
</Fields>
<Methods />
<Tags>
<CategoryIndices />
@ -2990,6 +2993,8 @@
<HelpData Key="assign_tuple.expr" Value="" />
<HelpData Key="assign_tuple.vars" Value="" />
<HelpData Key="assign_var_tuple" Value="" />
<HelpData Key="assign_var_tuple.expr" Value="" />
<HelpData Key="assign_var_tuple.idents" Value="" />
<HelpData Key="attribute" Value="" />
<HelpData Key="attribute." Value="" />
<HelpData Key="attribute.arguments" Value="" />

View file

@ -28,7 +28,7 @@ namespace SyntaxVisitors.SugarVisitors
{
// тут возможно ошибка более глубокая - в semantic_check_sugared_statement_node(asstup) возможно остаются во вложенных лямбдах другие assign_tuple
var sl = new statement_list();
sl.Add(new semantic_check_sugared_statement_node(typeof(assign_tuple), new List<syntax_tree_node> { asstup.vars, asstup.expr })); // Это нужно для проверок на этапе преобразования в семантику
sl.Add(new semantic_check_sugared_statement_node(typeof(assign_tuple), new List<syntax_tree_node> { asstup.vars, asstup.expr }, asstup.source_context)); // Это нужно для проверок на этапе преобразования в семантику
var tname = "#temp_var" + UniqueNumStr();
var tt = new var_statement(new ident(tname), asstup.expr);
@ -51,18 +51,18 @@ namespace SyntaxVisitors.SugarVisitors
public override void visit(assign_var_tuple assvartup)
{
var sl = new List<statement>();
sl.Add(new semantic_check_sugared_statement_node(typeof(assign_tuple), new List<syntax_tree_node> { assvartup.vars, assvartup.expr })); // Это нужно для проверок на этапе преобразования в семантику
sl.Add(new semantic_check_sugared_statement_node(typeof(assign_var_tuple), new List<syntax_tree_node> { assvartup.idents, assvartup.expr }, assvartup.source_context)); // Это нужно для проверок на этапе преобразования в семантику
var tname = "#temp_var" + UniqueNumStr();
var tt = new var_statement(new ident(tname), assvartup.expr); // тут для assvartup.expr внутри повторно вызывается convert_strong, это плохо, но если там лямбда, то иначе - с semantic_addr_value - не работает!!!
sl.Add(tt); // он же помещается в новое синтаксическое дерево
var n = assvartup.vars.variables.Count();
var n = assvartup.idents.idents.Count();
for (var i = 0; i < n; i++)
{
var a = new var_statement(assvartup.vars.variables[i] as ident,
var a = new var_statement(assvartup.idents.idents[i],
new dot_node(new ident(tname), new ident("Item" + (i + 1).ToString())),
assvartup.vars.variables[i].source_context);
assvartup.idents.idents[i].source_context);
sl.Add(a);
}
ReplaceStatementUsingParent(assvartup, sl);

View file

@ -1087,6 +1087,8 @@ function ArcTan(x: real): real;
function Exp(x: real): real;
/// Возвращает натуральный логарифм числа x
function Ln(x: real): real;
/// Возвращает натуральный логарифм числа x
function Log(x: real): real;
/// Возвращает логарифм числа x по основанию 2
function Log2(x: real): real;
/// Возвращает десятичный логарифм числа x
@ -1231,6 +1233,8 @@ function Cos(c: Complex): Complex;
/// Возвращает экспоненту комплексного числа
function Exp(c: Complex): Complex;
/// Возвращает натуральный логарифм комплексного числа
function Ln(c: Complex): Complex;
/// Возвращает натуральный логарифм комплексного числа
function Log(c: Complex): Complex;
/// Возвращает десятичный логарифм комплексного числа
function Log10(c: Complex): Complex;
@ -6573,10 +6577,7 @@ begin
System.Diagnostics.Process.Start(filename)
end;
procedure Execute(filename: string; args: string);
begin
System.Diagnostics.Process.Start(filename, args)
end;
procedure Execute(filename: string; args: string) := System.Diagnostics.Process.Start(filename, args);
// -----------------------------------------------------
// EnumerateFiles, EnumerateDirectories
@ -6734,130 +6735,57 @@ begin
Result := Math.Abs(x);
end;
function Sin(x: real): real;
begin
Result := Math.Sin(x);
end;
function Sin(x: real) := Math.Sin(x);
function Sinh(x: real): real;
begin
Result := Math.Sinh(x);
end;
function Sinh(x: real) := Math.Sinh(x);
function Cos(x: real): real;
begin
Result := Math.Cos(x);
end;
function Cos(x: real) := Math.Cos(x);
function Cosh(x: real): real;
begin
Result := Math.Cosh(x);
end;
function Cosh(x: real) := Math.Cosh(x);
function Tan(x: real): real;
begin
Result := Math.Tan(x);
end;
function Tan(x: real) := Math.Tan(x);
function Tanh(x: real): real;
begin
Result := Math.Tanh(x);
end;
function Tanh(x: real) := Math.Tanh(x);
function ArcSin(x: real): real;
begin
Result := Math.Asin(x);
end;
function ArcSin(x: real) := Math.Asin(x);
function ArcCos(x: real): real;
begin
Result := Math.Acos(x);
end;
function ArcCos(x: real) := Math.Acos(x);
function ArcTan(x: real): real;
begin
Result := Math.Atan(x);
end;
function ArcTan(x: real) := Math.Atan(x);
function Exp(x: real): real;
begin
Result := Math.Exp(x);
end;
function Exp(x: real) := Math.Exp(x);
function Ln(x: real): real;
begin
Result := Math.Log(x);
end;
function Ln(x: real) := Math.Log(x);
function Log2(x: real): real;
begin
Result := LogN(2, x);
end;
function Log(x: real) := Math.Log(x);
function Log10(x: real): real;
begin
Result := Math.Log10(x);
end;
function Log2(x: real) := LogN(2, x);
function LogN(base, x: real): real;
begin
Result := Math.Log(x) / Math.Log(base);
end;
function Log10(x: real) := Math.Log10(x);
function Sqrt(x: real): real;
begin
Result := Math.Sqrt(x);
end;
function LogN(base, x: real) := Math.Log(x) / Math.Log(base);
function Sqr(x: integer): int64;
begin
Result := x * x;
end;
function Sqrt(x: real) := Math.Sqrt(x);
function Sqr(x: shortint): integer;
begin
Result := x * x;
end;
function Sqr(x: integer): int64 := x * x;
function Sqr(x: smallint): integer;
begin
Result := x * x;
end;
function Sqr(x: shortint): integer := x * x;
function Sqr(x: BigInteger): BigInteger;
begin
Result := x * x;
end;
function Sqr(x: smallint): integer := x * x;
function Sqr(x: longword): uint64;
begin
Result := x * x;
end;
function Sqr(x: BigInteger): BigInteger := x * x;
function Sqr(x: int64): int64;
begin
Result := x * x;
end;
function Sqr(x: longword): uint64 := x * x;
function Sqr(x: uint64): uint64;
begin
Result := x * x;
end;
function Sqr(x: int64): int64 := x * x;
function Sqr(x: real): real;
begin
Result := x * x;
end;
function Sqr(x: uint64): uint64 := x * x;
function Power(x, y: real): real;
begin
Result := Math.Pow(x, y);
end;
function Sqr(x: real): real := x * x;
function Power(x, y: integer): real;
begin
Result := Math.Pow(x, y);
end;
function Power(x, y: real): real := Math.Pow(x, y);
function Power(x, y: integer): real := Math.Pow(x, y);
function Power(x: BigInteger; y: integer): BigInteger;
begin
@ -7104,6 +7032,8 @@ function Exp(c: Complex) := Complex.Exp(c);
function Log(c: Complex) := Complex.Log(c);
function Ln(c: Complex) := Complex.Log(c);
function Log10(c: Complex) := Complex.Log10(c);
function Power(c,power: Complex) := Complex.Pow(c,power);

View file

@ -0,0 +1,4 @@
begin
var a,b: integer;
(a, b) := (1,1);
end.

View file

@ -0,0 +1,5 @@
begin
var (a, b) := (1,1);
assert((a=1) and (b=1));
assert((a,b) = (1,1));
end.

View file

@ -10,7 +10,7 @@ namespace PascalABCCompiler.TreeConverter
{
public partial class syntax_tree_visitor
{
public void semantic_check_assign_tuple(addressed_value_list vars, expression ex) // подходит и для assign_var_tuple
public void semantic_check_assign_tuple(addressed_value_list vars, expression ex)
{
// Проверить, что справа - Tuple
var expr = convert_strong(ex);
@ -28,6 +28,24 @@ namespace PascalABCCompiler.TreeConverter
AddError(get_location(vars), "TOO_MANY_ELEMENTS_ON_LEFT_SIDE_OF_TUPLE_ASSIGNMRNT");
}
public void semantic_check_assign_var_tuple(ident_list vars, expression ex)
{
// Проверить, что справа - Tuple
var expr = convert_strong(ex);
expr = convert_if_typed_expression_to_function_call(expr);
var t = ConvertSemanticTypeNodeToNETType(expr.type);
if (t == null)
AddError(expr.location, "TUPLE_EXPECTED");
if (!t.FullName.StartsWith("System.Tuple"))
AddError(expr.location, "TUPLE_EXPECTED");
var n = vars.idents.Count();
if (n > t.GetGenericArguments().Count())
AddError(get_location(vars), "TOO_MANY_ELEMENTS_ON_LEFT_SIDE_OF_TUPLE_ASSIGNMRNT");
}
void semantic_check_method_call_as_slice_expr(SyntaxTree.method_call mc)
// нельзя проверять сахарный узел, т.к.могут быть вложенные сахарные expression!!
{

View file

@ -19385,11 +19385,17 @@ namespace PascalABCCompiler.TreeConverter
{
var vars = st.lst[0] as SyntaxTree.addressed_value_list;
var expr = st.lst[1] as SyntaxTree.expression;
semantic_check_assign_tuple(vars,expr);
semantic_check_assign_tuple(vars, expr);
}
else
else if (st.typ as System.Type == typeof(SyntaxTree.assign_var_tuple))
{
AddError(get_location(st), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}", st.GetType().Name);
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(); // обязательно очистить - этот узел в семантику ничего не должен приносить!
}

Binary file not shown.

View file

@ -1087,6 +1087,8 @@ function ArcTan(x: real): real;
function Exp(x: real): real;
/// Возвращает натуральный логарифм числа x
function Ln(x: real): real;
/// Возвращает натуральный логарифм числа x
function Log(x: real): real;
/// Возвращает логарифм числа x по основанию 2
function Log2(x: real): real;
/// Возвращает десятичный логарифм числа x
@ -1231,6 +1233,8 @@ function Cos(c: Complex): Complex;
/// Возвращает экспоненту комплексного числа
function Exp(c: Complex): Complex;
/// Возвращает натуральный логарифм комплексного числа
function Ln(c: Complex): Complex;
/// Возвращает натуральный логарифм комплексного числа
function Log(c: Complex): Complex;
/// Возвращает десятичный логарифм комплексного числа
function Log10(c: Complex): Complex;
@ -6573,10 +6577,7 @@ begin
System.Diagnostics.Process.Start(filename)
end;
procedure Execute(filename: string; args: string);
begin
System.Diagnostics.Process.Start(filename, args)
end;
procedure Execute(filename: string; args: string) := System.Diagnostics.Process.Start(filename, args);
// -----------------------------------------------------
// EnumerateFiles, EnumerateDirectories
@ -6734,130 +6735,57 @@ begin
Result := Math.Abs(x);
end;
function Sin(x: real): real;
begin
Result := Math.Sin(x);
end;
function Sin(x: real) := Math.Sin(x);
function Sinh(x: real): real;
begin
Result := Math.Sinh(x);
end;
function Sinh(x: real) := Math.Sinh(x);
function Cos(x: real): real;
begin
Result := Math.Cos(x);
end;
function Cos(x: real) := Math.Cos(x);
function Cosh(x: real): real;
begin
Result := Math.Cosh(x);
end;
function Cosh(x: real) := Math.Cosh(x);
function Tan(x: real): real;
begin
Result := Math.Tan(x);
end;
function Tan(x: real) := Math.Tan(x);
function Tanh(x: real): real;
begin
Result := Math.Tanh(x);
end;
function Tanh(x: real) := Math.Tanh(x);
function ArcSin(x: real): real;
begin
Result := Math.Asin(x);
end;
function ArcSin(x: real) := Math.Asin(x);
function ArcCos(x: real): real;
begin
Result := Math.Acos(x);
end;
function ArcCos(x: real) := Math.Acos(x);
function ArcTan(x: real): real;
begin
Result := Math.Atan(x);
end;
function ArcTan(x: real) := Math.Atan(x);
function Exp(x: real): real;
begin
Result := Math.Exp(x);
end;
function Exp(x: real) := Math.Exp(x);
function Ln(x: real): real;
begin
Result := Math.Log(x);
end;
function Ln(x: real) := Math.Log(x);
function Log2(x: real): real;
begin
Result := LogN(2, x);
end;
function Log(x: real) := Math.Log(x);
function Log10(x: real): real;
begin
Result := Math.Log10(x);
end;
function Log2(x: real) := LogN(2, x);
function LogN(base, x: real): real;
begin
Result := Math.Log(x) / Math.Log(base);
end;
function Log10(x: real) := Math.Log10(x);
function Sqrt(x: real): real;
begin
Result := Math.Sqrt(x);
end;
function LogN(base, x: real) := Math.Log(x) / Math.Log(base);
function Sqr(x: integer): int64;
begin
Result := x * x;
end;
function Sqrt(x: real) := Math.Sqrt(x);
function Sqr(x: shortint): integer;
begin
Result := x * x;
end;
function Sqr(x: integer): int64 := x * x;
function Sqr(x: smallint): integer;
begin
Result := x * x;
end;
function Sqr(x: shortint): integer := x * x;
function Sqr(x: BigInteger): BigInteger;
begin
Result := x * x;
end;
function Sqr(x: smallint): integer := x * x;
function Sqr(x: longword): uint64;
begin
Result := x * x;
end;
function Sqr(x: BigInteger): BigInteger := x * x;
function Sqr(x: int64): int64;
begin
Result := x * x;
end;
function Sqr(x: longword): uint64 := x * x;
function Sqr(x: uint64): uint64;
begin
Result := x * x;
end;
function Sqr(x: int64): int64 := x * x;
function Sqr(x: real): real;
begin
Result := x * x;
end;
function Sqr(x: uint64): uint64 := x * x;
function Power(x, y: real): real;
begin
Result := Math.Pow(x, y);
end;
function Sqr(x: real): real := x * x;
function Power(x, y: integer): real;
begin
Result := Math.Pow(x, y);
end;
function Power(x, y: real): real := Math.Pow(x, y);
function Power(x, y: integer): real := Math.Pow(x, y);
function Power(x: BigInteger; y: integer): BigInteger;
begin
@ -7104,6 +7032,8 @@ function Exp(c: Complex) := Complex.Exp(c);
function Log(c: Complex) := Complex.Log(c);
function Ln(c: Complex) := Complex.Log(c);
function Log10(c: Complex) := Complex.Log10(c);
function Power(c,power: Complex) := Complex.Pow(c,power);

Binary file not shown.