This commit is contained in:
Бондарев Иван 2017-02-19 12:27:51 +01:00
parent 0cc1e4e5ca
commit a59f622e0c
3 changed files with 77 additions and 11 deletions

View file

@ -385,6 +385,8 @@ type
function FullName: string;
/// Возвращает в виде строки содержимое файла от текущего положения до конца
function ReadToEnd: string;
/// Устанавливает файловый указатель на начало файла
procedure Reset;
end;
/// Тип текстового файла
@ -1213,8 +1215,27 @@ function Odd(i: uint64): boolean;
// -----------------------------------------------------
/// Конструирует комплексное число с вещественной частью re и мнимой частью im
function Cplx(re,im: real): Complex;
/// Вычисляет квадратный корень из комплексного числа
/// Конструирует комплексное число по полярным координатам
function CplxFromPolar(magnitude,phase: real) : Complex;
/// Возвращает квадратный корень из комплексного числа
function Sqrt(c: Complex): Complex;
/// Возвращает модуль комплексного числа
function Abs(c: Complex): Complex;
/// Возвращает комплексно сопряженное число
function Conjugate(c: Complex): Complex;
/// Возвращает косинус комплексного числа
function Cos(c: Complex): Complex;
/// Возвращает экспоненту комплексного числа
function Exp(c: Complex): Complex;
/// Возвращает натуральный логарифм комплексного числа
function Log(c: Complex): Complex;
/// Возвращает десятичный логарифм комплексного числа
function Log10(c: Complex): Complex;
/// Возвращает степень комплексного числа
function Power(c,power: Complex): Complex;
/// Возвращает синус комплексного числа
function Sin(c: Complex): Complex;
// -----------------------------------------------------
//>> Процедуры для работы со стандартными множествами # Subroutines for set of T
@ -5207,6 +5228,12 @@ begin
Result := sr.ReadToEnd
end;
procedure Text.Reset;
begin
PABCSystem.Reset(Self);
end;
// -----------------------------------------------------
// AbstractBinaryFile methods
// -----------------------------------------------------
@ -7038,16 +7065,27 @@ begin
result := (i mod 2) <> 0;
end;
function Cplx(re,im: real): Complex;
begin
Result := new Complex(re,im);
end;
function Cplx(re,im: real) := new Complex(re,im);
function Sqrt(c: Complex): Complex;
begin
Result := Complex.Sqrt(c);
end;
function CplxFromPolar(magnitude,phase: real) := Complex.FromPolarCoordinates(magnitude,phase);
function Sqrt(c: Complex) := Complex.Sqrt(c);
function Abs(c: Complex) := Complex.Abs(c);
function Conjugate(c: Complex) := Complex.Conjugate(c);
function Cos(c: Complex) := Complex.Cos(c);
function Exp(c: Complex) := Complex.Exp(c);
function Log(c: Complex) := Complex.Log(c);
function Log10(c: Complex) := Complex.Log10(c);
function Power(c,power: Complex) := Complex.Pow(c,power);
function Sin(c: Complex) := Complex.Sin(c);
// -----------------------------------------------------
// Dynamic arrays: implementation
@ -9937,6 +9975,7 @@ function operator><T1,T2,T3,T4> (Self: (T1,T2,T3,T4); v: (T1,T2,T3,T4)); extensi
///--
function operator>=<T1,T2,T3,T4> (Self: (T1,T2,T3,T4); v: (T1,T2,T3,T4)); extensionmethod := CompareToTup4(Self,v) >= 0;
// --------------------------------------------
// Методы расширения типа Tuple # Extension methods for Tuple
// -------------------------------------------

15
TestSuite/delegates8.pas Normal file
View file

@ -0,0 +1,15 @@
var x: integer;
procedure pp;
begin
x := 1;
end;
type proc = procedure;
begin
var p: procedure;
var o: object := p;
o := pp;
p := proc(o);
p;
assert(x = 1);
end.

View file

@ -1099,8 +1099,20 @@ namespace PascalABCCompiler.TreeConverter
{
if (is_alone_method_defined)
{
error = new CanNotConvertTypes(factparams[i], factparams[i].type, formal_param_type, locg);
//AddError(new CanNotConvertTypes(factparams[i], factparams[i].type, formal_param_type, locg));
//issue #348
if (formal_param_type == SystemLibrary.SystemLibrary.object_type && factparams[i].type is delegated_methods)
{
possible_type_convertions ptci = new possible_type_convertions();
ptci.first = null;
ptci.second = null;
ptci.from = factparams[i].type;
ptci.to = formal_param_type;
tc.AddElement(ptci);
factparams[i] = syntax_tree_visitor.CreateDelegateCall((factparams[i].type as delegated_methods).proper_methods[0]);
return tc;
}
else
error = new CanNotConvertTypes(factparams[i], factparams[i].type, formal_param_type, locg);
}
return null;