bug fix #1000
Запрещены неявные преобразования из real в decimal и из short в decimal как в C#
This commit is contained in:
parent
742e6aa243
commit
da8b1e671c
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
|||
public const string Major = "3";
|
||||
public const string Minor = "4";
|
||||
public const string Build = "0";
|
||||
public const string Revision = "1716";
|
||||
public const string Revision = "1719";
|
||||
|
||||
public const string MainVersion = Major + "." + Minor;
|
||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%MINOR%=4
|
||||
%REVISION%=1716
|
||||
%COREVERSION%=0
|
||||
%REVISION%=1719
|
||||
%MINOR%=4
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.4.0.1716'
|
||||
!define VERSION '3.4.0.1719'
|
||||
|
|
|
|||
|
|
@ -1475,6 +1475,8 @@ function StrToInt(s: string): integer;
|
|||
function StrToInt64(s: string): int64;
|
||||
/// Преобразует строковое представление вещественного числа к числовому значению
|
||||
function StrToFloat(s: string): real;
|
||||
/// Преобразует строковое представление вещественного числа к числовому значению
|
||||
function StrToReal(s: string): real;
|
||||
/// Преобразует строковое представление s целого числа к числовому значению и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryStrToInt(s: string; var value: integer): boolean;
|
||||
|
|
@ -1487,6 +1489,12 @@ function TryStrToFloat(s: string; var value: real): boolean;
|
|||
/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryStrToFloat(s: string; var value: single): boolean;
|
||||
/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryStrToReal(s: string; var value: real): boolean;
|
||||
/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryStrToSingle(s: string; var value: single): boolean;
|
||||
/// Считывает целое из строки начиная с позиции from и устанавливает from за считанным значением
|
||||
function ReadIntegerFromString(s: string; var from: integer): integer;
|
||||
/// Считывает вещественное из строки начиная с позиции from и устанавливает from за считанным значением
|
||||
|
|
@ -7789,6 +7797,8 @@ begin
|
|||
Result := Convert.ToDouble(s, nfi);
|
||||
end;
|
||||
|
||||
function StrToReal(s: string) := StrToFloat(s);
|
||||
|
||||
function TryStrToInt64(s: string; var value: int64): boolean;
|
||||
begin
|
||||
Result := int64.TryParse(s, value);
|
||||
|
|
@ -7816,6 +7826,9 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function TryStrToReal(s: string; var value: real) := TryStrToFloat(s, value);
|
||||
function TryStrToSingle(s: string; var value: single) := TryStrToFloat(s, value);
|
||||
|
||||
function ReadIntegerFromString(s: string; var from: integer): integer;
|
||||
begin
|
||||
while (from <= s.Length) and char.IsWhiteSpace(s[from]) do
|
||||
|
|
|
|||
|
|
@ -1295,7 +1295,7 @@ type
|
|||
|
||||
SequenceAnimation = class(CompositeAnimation)
|
||||
public
|
||||
function Duration: real; override := ll.Sum(l -> l.Duration);
|
||||
function Duration: real; override := ll.Select(l -> l.Duration).Sum;
|
||||
function Add(b: MyAnimation): SequenceAnimation;
|
||||
begin
|
||||
ll += b;
|
||||
|
|
|
|||
|
|
@ -2020,12 +2020,22 @@ namespace PascalABCCompiler.SystemLibrary
|
|||
string[] s=new string[0];
|
||||
_array_of_string = compiled_type_node.get_type_node(s.GetType());
|
||||
|
||||
make_type_conversion_use_ctor(_float_type, _decimal_type, type_compare.less_type, true);
|
||||
make_type_conversion_use_ctor(_double_type, _decimal_type, type_compare.less_type, true);
|
||||
//это преобразование есть явно в decimal
|
||||
//это преобразование есть явно в decimal - это уже давно было закомментировано
|
||||
//make_type_conversion_use_ctor(_integer_type, _decimal_type, type_compare.less_type, true);
|
||||
make_type_conversion_use_ctor(_uint_type, _decimal_type, type_compare.less_type, true);
|
||||
make_type_conversion_use_ctor(_uint64_type, _decimal_type, type_compare.less_type, true);
|
||||
|
||||
//make_type_conversion_use_ctor(_float_type, _decimal_type, type_compare.less_type, true);
|
||||
//make_type_conversion_use_ctor(_double_type, _decimal_type, type_compare.less_type, true);
|
||||
|
||||
//make_type_conversion_use_ctor(_uint_type, _decimal_type, type_compare.less_type, true);
|
||||
//make_type_conversion_use_ctor(_uint64_type, _decimal_type, type_compare.less_type, true);
|
||||
|
||||
// SSM 21.07.18 закомментировал четыре строчки выше, т.к. они давали неоднозначность при decimal(2.5).
|
||||
// Теперь из real в decimal и из single в decimal возможно только явное преобразование
|
||||
// Из longword в decimal и из uint64 в decimal существуют как явное, так и неявное преобразованя
|
||||
// Это полностью соответствует тому, что в C#
|
||||
|
||||
// забавно, но make_type_conversion_use_ctor используется ТОЛЬКО тут и ТОЛЬКО для типа decimal !!!!!!!
|
||||
// То есть, это было неправильное исправление
|
||||
|
||||
writable_in_typed_files_types.Clear();
|
||||
writable_in_typed_files_types.Add(_bool_type, _bool_type);
|
||||
|
|
|
|||
|
|
@ -1295,7 +1295,7 @@ type
|
|||
|
||||
SequenceAnimation = class(CompositeAnimation)
|
||||
public
|
||||
function Duration: real; override := ll.Sum(l -> l.Duration);
|
||||
function Duration: real; override := ll.Select(l -> l.Duration).Sum;
|
||||
function Add(b: MyAnimation): SequenceAnimation;
|
||||
begin
|
||||
ll += b;
|
||||
|
|
|
|||
|
|
@ -1471,7 +1471,7 @@ public
|
|||
|
||||
|
||||
/// --- SystemKeyEvents
|
||||
procedure SystemOnKeyDown(sender: Object; e: System.Windows.Input.KeyEventArgs);
|
||||
(*procedure SystemOnKeyDown(sender: Object; e: System.Windows.Input.KeyEventArgs);
|
||||
begin
|
||||
if GraphWPF.OnKeyDown <> nil then
|
||||
GraphWPF.OnKeyDown(e.Key);
|
||||
|
|
@ -1520,7 +1520,7 @@ public
|
|||
mb := 2;
|
||||
if GraphWPF.OnMouseMove <> nil then
|
||||
GraphWPF.OnMouseMove(p.x, p.y, mb);
|
||||
end;
|
||||
end;*)
|
||||
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -1475,6 +1475,8 @@ function StrToInt(s: string): integer;
|
|||
function StrToInt64(s: string): int64;
|
||||
/// Преобразует строковое представление вещественного числа к числовому значению
|
||||
function StrToFloat(s: string): real;
|
||||
/// Преобразует строковое представление вещественного числа к числовому значению
|
||||
function StrToReal(s: string): real;
|
||||
/// Преобразует строковое представление s целого числа к числовому значению и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryStrToInt(s: string; var value: integer): boolean;
|
||||
|
|
@ -1487,6 +1489,12 @@ function TryStrToFloat(s: string; var value: real): boolean;
|
|||
/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryStrToFloat(s: string; var value: single): boolean;
|
||||
/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryStrToReal(s: string; var value: real): boolean;
|
||||
/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryStrToSingle(s: string; var value: single): boolean;
|
||||
/// Считывает целое из строки начиная с позиции from и устанавливает from за считанным значением
|
||||
function ReadIntegerFromString(s: string; var from: integer): integer;
|
||||
/// Считывает вещественное из строки начиная с позиции from и устанавливает from за считанным значением
|
||||
|
|
@ -7789,6 +7797,8 @@ begin
|
|||
Result := Convert.ToDouble(s, nfi);
|
||||
end;
|
||||
|
||||
function StrToReal(s: string) := StrToFloat(s);
|
||||
|
||||
function TryStrToInt64(s: string; var value: int64): boolean;
|
||||
begin
|
||||
Result := int64.TryParse(s, value);
|
||||
|
|
@ -7816,6 +7826,9 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function TryStrToReal(s: string; var value: real) := TryStrToFloat(s, value);
|
||||
function TryStrToSingle(s: string; var value: single) := TryStrToFloat(s, value);
|
||||
|
||||
function ReadIntegerFromString(s: string; var from: integer): integer;
|
||||
begin
|
||||
while (from <= s.Length) and char.IsWhiteSpace(s[from]) do
|
||||
|
|
|
|||
Loading…
Reference in a new issue