parent
58b89acc0c
commit
1446ca2fba
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
||||||
public const string Major = "3";
|
public const string Major = "3";
|
||||||
public const string Minor = "4";
|
public const string Minor = "4";
|
||||||
public const string Build = "0";
|
public const string Build = "0";
|
||||||
public const string Revision = "1733";
|
public const string Revision = "1734";
|
||||||
|
|
||||||
public const string MainVersion = Major + "." + Minor;
|
public const string MainVersion = Major + "." + Minor;
|
||||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
%COREVERSION%=0
|
|
||||||
%REVISION%=1733
|
|
||||||
%MINOR%=4
|
%MINOR%=4
|
||||||
|
%REVISION%=1734
|
||||||
|
%COREVERSION%=0
|
||||||
%MAJOR%=3
|
%MAJOR%=3
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
!define VERSION '3.4.0.1733'
|
!define VERSION '3.4.0.1734'
|
||||||
|
|
|
||||||
|
|
@ -9057,6 +9057,13 @@ begin
|
||||||
Self[i] := f(Self[i]);
|
Self[i] := f(Self[i]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/// Преобразует элементы массива или списка по заданному правилу
|
||||||
|
procedure Transform<T>(Self: IList<T>; f: (T,integer)->T); extensionmethod;
|
||||||
|
begin
|
||||||
|
for var i := 0 to Self.Count - 1 do
|
||||||
|
Self[i] := f(Self[i],i);
|
||||||
|
end;
|
||||||
|
|
||||||
/// Заполняет элементы массива или списка значениями, вычисляемыми по некоторому правилу
|
/// Заполняет элементы массива или списка значениями, вычисляемыми по некоторому правилу
|
||||||
procedure Fill<T>(Self: IList<T>; f: integer->T); extensionmethod;
|
procedure Fill<T>(Self: IList<T>; f: integer->T); extensionmethod;
|
||||||
begin
|
begin
|
||||||
|
|
@ -9448,6 +9455,15 @@ begin
|
||||||
Result[i, j] := converter(Self[i, j]);
|
Result[i, j] := converter(Self[i, j]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/// Преобразует элементы двумерного массива и возвращает преобразованный массив
|
||||||
|
function ConvertAll<T, T1>(Self: array [,] of T; converter: (T,integer,integer)->T1): array [,] of T1; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := new T1[Self.RowCount, Self.ColCount];
|
||||||
|
for var i := 0 to Self.RowCount - 1 do
|
||||||
|
for var j := 0 to Self.ColCount - 1 do
|
||||||
|
Result[i, j] := converter(Self[i, j],i,j);
|
||||||
|
end;
|
||||||
|
|
||||||
/// Преобразует элементы двумерного массива по заданному правилу
|
/// Преобразует элементы двумерного массива по заданному правилу
|
||||||
procedure Transform<T>(Self: array [,] of T; f: T->T); extensionmethod;
|
procedure Transform<T>(Self: array [,] of T; f: T->T); extensionmethod;
|
||||||
begin
|
begin
|
||||||
|
|
@ -9456,6 +9472,14 @@ begin
|
||||||
Self[i, j] := f(Self[i, j]);
|
Self[i, j] := f(Self[i, j]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/// Преобразует элементы двумерного массива по заданному правилу
|
||||||
|
procedure Transform<T>(Self: array [,] of T; f: (T,integer,integer)->T); extensionmethod;
|
||||||
|
begin
|
||||||
|
for var i := 0 to Self.RowCount - 1 do
|
||||||
|
for var j := 0 to Self.ColCount - 1 do
|
||||||
|
Self[i, j] := f(Self[i, j],i,j);
|
||||||
|
end;
|
||||||
|
|
||||||
/// Заполняет элементы двумерного массива значениями, вычисляемыми по некоторому правилу
|
/// Заполняет элементы двумерного массива значениями, вычисляемыми по некоторому правилу
|
||||||
procedure Fill<T>(Self: array [,] of T; f: (integer,integer) ->T); extensionmethod;
|
procedure Fill<T>(Self: array [,] of T; f: (integer,integer) ->T); extensionmethod;
|
||||||
begin
|
begin
|
||||||
|
|
@ -9757,6 +9781,14 @@ begin
|
||||||
Result := System.Array.ConvertAll(self, t -> converter(t));
|
Result := System.Array.ConvertAll(self, t -> converter(t));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/// Преобразует элементы массива и возвращает преобразованный массив
|
||||||
|
function ConvertAll<T, T1>(Self: array of T; converter: (T,integer)->T1): array of T1; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := new T1[Self.Length];
|
||||||
|
for var i := 0 to Self.Length - 1 do
|
||||||
|
Result[i] := converter(Self[i],i);
|
||||||
|
end;
|
||||||
|
|
||||||
/// Выполняет поиск первого элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается нулевое значение соответствующего типа
|
/// Выполняет поиск первого элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается нулевое значение соответствующего типа
|
||||||
function Find<T>(Self: array of T; p: T->boolean): T; extensionmethod;
|
function Find<T>(Self: array of T; p: T->boolean): T; extensionmethod;
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
7
TestSuite/FunDelNoParamsToObject.pas
Normal file
7
TestSuite/FunDelNoParamsToObject.pas
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
function f := 123;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var ff: ()->integer := f;
|
||||||
|
var r: object := ff;
|
||||||
|
Assert(r.Equals(123));
|
||||||
|
end.
|
||||||
|
|
@ -945,6 +945,8 @@ namespace PascalABCCompiler.TreeRealization
|
||||||
{
|
{
|
||||||
if (dii.return_value_type == to)
|
if (dii.return_value_type == to)
|
||||||
{
|
{
|
||||||
|
if (ret.first != null) // SSM 09.08.18
|
||||||
|
ret.first = null;
|
||||||
add_conversion(ret, new convert_types_function_node(convert_delegate_to_return_value_type, true), from, to);
|
add_conversion(ret, new convert_types_function_node(convert_delegate_to_return_value_type, true), from, to);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -953,11 +955,15 @@ namespace PascalABCCompiler.TreeRealization
|
||||||
if ((ptcc.first != null) && (ptcc.first.convertion_method != null))
|
if ((ptcc.first != null) && (ptcc.first.convertion_method != null))
|
||||||
{
|
{
|
||||||
delegate_type_converter dtc = new delegate_type_converter(ptcc.first.convertion_method);
|
delegate_type_converter dtc = new delegate_type_converter(ptcc.first.convertion_method);
|
||||||
|
if (ret.first != null) // SSM 09.08.18
|
||||||
|
ret.first = null;
|
||||||
add_conversion(ret, new convert_types_function_node(dtc.convert_delegate_to_return_value_type_with_convertion, false), from, to);
|
add_conversion(ret, new convert_types_function_node(dtc.convert_delegate_to_return_value_type_with_convertion, false), from, to);
|
||||||
}
|
}
|
||||||
if ((ptcc.second != null) && (ptcc.second.convertion_method != null))
|
if ((ptcc.second != null) && (ptcc.second.convertion_method != null))
|
||||||
{
|
{
|
||||||
delegate_type_converter dtc = new delegate_type_converter(ptcc.second.convertion_method);
|
delegate_type_converter dtc = new delegate_type_converter(ptcc.second.convertion_method);
|
||||||
|
if (ret.first != null) // SSM 09.08.18
|
||||||
|
ret.first = null;
|
||||||
add_conversion(ret, new convert_types_function_node(dtc.convert_delegate_to_return_value_type_with_convertion, false), from, to);
|
add_conversion(ret, new convert_types_function_node(dtc.convert_delegate_to_return_value_type_with_convertion, false), from, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9455,6 +9455,15 @@ begin
|
||||||
Result[i, j] := converter(Self[i, j]);
|
Result[i, j] := converter(Self[i, j]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/// Преобразует элементы двумерного массива и возвращает преобразованный массив
|
||||||
|
function ConvertAll<T, T1>(Self: array [,] of T; converter: (T,integer,integer)->T1): array [,] of T1; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := new T1[Self.RowCount, Self.ColCount];
|
||||||
|
for var i := 0 to Self.RowCount - 1 do
|
||||||
|
for var j := 0 to Self.ColCount - 1 do
|
||||||
|
Result[i, j] := converter(Self[i, j],i,j);
|
||||||
|
end;
|
||||||
|
|
||||||
/// Преобразует элементы двумерного массива по заданному правилу
|
/// Преобразует элементы двумерного массива по заданному правилу
|
||||||
procedure Transform<T>(Self: array [,] of T; f: T->T); extensionmethod;
|
procedure Transform<T>(Self: array [,] of T; f: T->T); extensionmethod;
|
||||||
begin
|
begin
|
||||||
|
|
@ -9463,6 +9472,14 @@ begin
|
||||||
Self[i, j] := f(Self[i, j]);
|
Self[i, j] := f(Self[i, j]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/// Преобразует элементы двумерного массива по заданному правилу
|
||||||
|
procedure Transform<T>(Self: array [,] of T; f: (T,integer,integer)->T); extensionmethod;
|
||||||
|
begin
|
||||||
|
for var i := 0 to Self.RowCount - 1 do
|
||||||
|
for var j := 0 to Self.ColCount - 1 do
|
||||||
|
Self[i, j] := f(Self[i, j],i,j);
|
||||||
|
end;
|
||||||
|
|
||||||
/// Заполняет элементы двумерного массива значениями, вычисляемыми по некоторому правилу
|
/// Заполняет элементы двумерного массива значениями, вычисляемыми по некоторому правилу
|
||||||
procedure Fill<T>(Self: array [,] of T; f: (integer,integer) ->T); extensionmethod;
|
procedure Fill<T>(Self: array [,] of T; f: (integer,integer) ->T); extensionmethod;
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue