bug fix #982
This commit is contained in:
parent
c2b0392cbe
commit
4faef09f6a
|
|
@ -3901,9 +3901,9 @@ namespace PascalABCCompiler.NETGenerator
|
|||
else
|
||||
{
|
||||
if (rank > 1)
|
||||
CreateNDimUnsizedArray(il, (ElementValues[i] as IArrayInitializer).type, helper.GetTypeReference((ElementValues[i] as IArrayInitializer).type.element_type), rank, get_sizes(ElementValues[0] as IArrayInitializer, rank), lb.LocalType.GetElementType());
|
||||
CreateNDimUnsizedArray(il, (ElementValues[i] as IArrayInitializer).type, helper.GetTypeReference((ElementValues[i] as IArrayInitializer).type.element_type), rank, get_sizes(ElementValues[i] as IArrayInitializer, rank), lb.LocalType.GetElementType());
|
||||
else
|
||||
CreateUnsizedArray(il, helper.GetTypeReference((ElementValues[i] as IArrayInitializer).type.element_type), (ElementValues[0] as IArrayInitializer).ElementValues.Length, lb.LocalType.GetElementType());
|
||||
CreateUnsizedArray(il, helper.GetTypeReference((ElementValues[i] as IArrayInitializer).type.element_type), (ElementValues[i] as IArrayInitializer).ElementValues.Length, lb.LocalType.GetElementType());
|
||||
il.Emit(OpCodes.Stelem, ArrType);
|
||||
il.Emit(OpCodes.Ldloc, lb);
|
||||
PushIntConst(il, i);
|
||||
|
|
@ -3927,7 +3927,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
PushIntConst(il, i);
|
||||
il.Emit(OpCodes.Ldelema, ti.tp);
|
||||
il.Emit(OpCodes.Stloc, llb);
|
||||
if (ElementValues[0] is IRecordConstantNode)
|
||||
if (ElementValues[i] is IRecordConstantNode)
|
||||
GenerateRecordInitCode(il, llb, ElementValues[i] as IRecordConstantNode);
|
||||
else GenerateRecordInitCode(il, llb, ElementValues[i] as IRecordInitializer, true);
|
||||
}
|
||||
|
|
@ -4023,7 +4023,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
}
|
||||
else
|
||||
{
|
||||
CreateUnsizedArray(il, helper.GetTypeReference((ElementValues[i] as IArrayConstantNode).type.element_type), (ElementValues[0] as IArrayConstantNode).ElementValues.Length, lb.LocalType.GetElementType());
|
||||
CreateUnsizedArray(il, helper.GetTypeReference((ElementValues[i] as IArrayConstantNode).type.element_type), (ElementValues[i] as IArrayConstantNode).ElementValues.Length, lb.LocalType.GetElementType());
|
||||
il.Emit(OpCodes.Stelem, ArrType);
|
||||
il.Emit(OpCodes.Ldloc, lb);
|
||||
PushIntConst(il, i);
|
||||
|
|
|
|||
|
|
@ -7799,47 +7799,15 @@ begin
|
|||
value := Res;
|
||||
end;
|
||||
|
||||
function StrToInt64(s: string): int64;
|
||||
begin
|
||||
Result := Convert.ToInt64(s);
|
||||
end;
|
||||
function StrToInt64(s: string) := Convert.ToInt64(s);
|
||||
function StrToReal(s: string) := Convert.ToDouble(s, nfi);
|
||||
function StrToFloat(s: string) := StrToReal(s);
|
||||
|
||||
function StrToFloat(s: string): real;
|
||||
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);
|
||||
end;
|
||||
|
||||
function TryStrToFloat(s: string; var value: real): boolean;
|
||||
begin
|
||||
try
|
||||
Result := True;
|
||||
value := Convert.ToDouble(s, nfi);
|
||||
except
|
||||
value := 0;
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TryStrToFloat(s: string; var value: single): boolean;
|
||||
begin
|
||||
try
|
||||
Result := True;
|
||||
value := Convert.ToSingle(s, nfi);
|
||||
except
|
||||
value := 0;
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TryStrToReal(s: string; var value: real) := TryStrToFloat(s, value);
|
||||
function TryStrToSingle(s: string; var value: single) := TryStrToFloat(s, value);
|
||||
function TryStrToInt64(s: string; var value: int64) := int64.TryParse(s, value);
|
||||
function TryStrToReal(s: string; var value: real) := real.TryParse(s,System.Globalization.NumberStyles.Float,nil,value);
|
||||
function TryStrToSingle(s: string; var value: single) := single.TryParse(s,System.Globalization.NumberStyles.Float,nil,value);
|
||||
function TryStrToFloat(s: string; var value: real) := TryStrToReal(s, value);
|
||||
function TryStrToFloat(s: string; var value: single) := TryStrToSingle(s, value);
|
||||
|
||||
function ReadIntegerFromString(s: string; var from: integer): integer;
|
||||
begin
|
||||
|
|
@ -10189,21 +10157,38 @@ begin
|
|||
end;
|
||||
|
||||
/// Преобразует строку в целое
|
||||
function ToInteger(Self: string): integer; extensionmethod;
|
||||
begin
|
||||
Result := integer.Parse(Self);
|
||||
end;
|
||||
function ToInteger(Self: string): integer; extensionmethod := integer.Parse(Self);
|
||||
|
||||
/// Преобразует строку в BigInteger
|
||||
function ToBigInteger(Self: string): BigInteger; extensionmethod;
|
||||
function ToBigInteger(Self: string): BigInteger; extensionmethod := BigInteger.Parse(Self);
|
||||
|
||||
/// Преобразует строку в вещественное
|
||||
function ToReal(Self: string): real; extensionmethod := real.Parse(Self, nfi);
|
||||
|
||||
/// Преобразует строку в целое и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryToInteger(Self: string; var value: integer): boolean; extensionmethod := TryStrToInt(Self,value);
|
||||
|
||||
/// Преобразует строку в вещественное и записывает его в value.
|
||||
///При невозможности преобразования возвращается False
|
||||
function TryToReal(Self: string; var value: real): boolean; extensionmethod := TryStrToReal(Self,value);
|
||||
|
||||
/// Преобразует строку в целое
|
||||
///При невозможности преобразования возвращается defaultvalue
|
||||
function ToInteger(Self: string; defaultvalue: integer): integer; extensionmethod;
|
||||
begin
|
||||
Result := BigInteger.Parse(Self);
|
||||
var b := TryStrToInt(Self,Result);
|
||||
if not b then
|
||||
Result := defaultvalue
|
||||
end;
|
||||
|
||||
/// Преобразует строку в вещественное
|
||||
function ToReal(Self: string): real; extensionmethod;
|
||||
///При невозможности преобразования возвращается defaultvalue
|
||||
function ToReal(Self: string; defaultvalue: real): real; extensionmethod;
|
||||
begin
|
||||
Result := real.Parse(Self, nfi);
|
||||
var b := TryStrToReal(Self,Result);
|
||||
if not b then
|
||||
Result := defaultvalue
|
||||
end;
|
||||
|
||||
/// Преобразует строку в массив слов
|
||||
|
|
|
|||
10
TestSuite/dynarrays4.pas
Normal file
10
TestSuite/dynarrays4.pas
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
var c2: array of array of integer := ((1,2,3),(4,5),(6,7,8));
|
||||
begin
|
||||
var c: array of array of integer := ((1,2,3),(4,5),(6,7,8));
|
||||
assert(c[0].Length = 3);
|
||||
assert(c[1].Length = 2);
|
||||
assert(c[2].Length = 3);
|
||||
assert(c2[0].Length = 3);
|
||||
assert(c2[1].Length = 2);
|
||||
assert(c2[2].Length = 3);
|
||||
end.
|
||||
Loading…
Reference in a new issue