parent
ecf1cd2955
commit
38842c45e7
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%COREVERSION%=0
|
||||
%REVISION%=1457
|
||||
%REVISION%=1463
|
||||
%MINOR%=2
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -168,5 +168,6 @@ script=
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.2.0.1457'
|
||||
!define VERSION '3.2.0.1463'
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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="" />
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
4
TestSuite/CompilationSamples/TupleAssign.pas
Normal file
4
TestSuite/CompilationSamples/TupleAssign.pas
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
begin
|
||||
var a,b: integer;
|
||||
(a, b) := (1,1);
|
||||
end.
|
||||
5
TestSuite/TupleVar2Assign.pas
Normal file
5
TestSuite/TupleVar2Assign.pas
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
begin
|
||||
var (a, b) := (1,1);
|
||||
assert((a=1) and (b=1));
|
||||
assert((a,b) = (1,1));
|
||||
end.
|
||||
|
|
@ -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!!
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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.
|
|
@ -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.
Loading…
Reference in a new issue