Empty arrays should be created.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4199 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2015-06-30 01:15:11 +00:00
parent d8e49350eb
commit 10ee3da8f0
3 changed files with 21 additions and 4 deletions

View File

@ -2674,11 +2674,11 @@ begin
end else begin end else begin
itmName := AName; itmName := AName;
end; end;
if (AObject = nil) then
AObject := Create();
len := AStore.BeginArrayRead(AName,ATypeInfo,styl,itmName); len := AStore.BeginArrayRead(AName,ATypeInfo,styl,itmName);
if ( len >= 0 ) then begin if ( len >= 0 ) then begin
Try Try
If Not Assigned(AObject) Then
AObject := Create();
itmTypInfo := PTypeInfo(GetItemClass().ClassInfo); itmTypInfo := PTypeInfo(GetItemClass().ClassInfo);
nativObj := AObject as TBaseObjectArrayRemotable; nativObj := AObject as TBaseObjectArrayRemotable;
If ( len > 0 ) Then Begin If ( len > 0 ) Then Begin
@ -3577,6 +3577,8 @@ begin
end else begin end else begin
itmName := AName; itmName := AName;
end; end;
if (AObject = nil) and Self.InheritsFrom(TBaseArrayRemotable) then
AObject := Create();
len := AStore.BeginArrayRead(AName,ATypeInfo, GetStyle(),itmName); len := AStore.BeginArrayRead(AName,ATypeInfo, GetStyle(),itmName);
if ( len > 0 ) then begin if ( len > 0 ) then begin
try try

View File

@ -1480,12 +1480,14 @@ var
i, c : Integer; i, c : Integer;
locSerInfo : TPropSerializationInfo; locSerInfo : TPropSerializationInfo;
begin begin
if (AObject = nil) and Target.InheritsFrom(TBaseArrayRemotable) then
AObject := Target.Create();
oldSS := AStore.GetSerializationStyle(); oldSS := AStore.GetSerializationStyle();
if ( osoDontDoBeginRead in Options ) or ( AStore.BeginObjectRead(AName,ATypeInfo) >= 0 ) then begin if ( osoDontDoBeginRead in Options ) or ( AStore.BeginObjectRead(AName,ATypeInfo) >= 0 ) then begin
try try
if AStore.IsCurrentScopeNil() then if AStore.IsCurrentScopeNil() then
Exit; // ???? FreeAndNil(AObject); Exit; // ???? FreeAndNil(AObject);
if not Assigned(AObject) then if (AObject = nil) then
AObject := Target.Create(); AObject := Target.Create();
c := FSerializationInfos.Count; c := FSerializationInfos.Count;
if ( c > 0 ) then begin if ( c > 0 ) then begin

View File

@ -3371,7 +3371,8 @@ begin
x := 'a'; x := 'a';
f.Get(TypeInfo(TArrayOfStringRemotable),x,a); f.Get(TypeInfo(TArrayOfStringRemotable),x,a);
f.EndScopeRead(); f.EndScopeRead();
CheckNull(a); CheckNotNull(a);
CheckEquals(0,a.Length);
a := TArrayOfStringRemotable.Create(); a := TArrayOfStringRemotable.Create();
f := CreateFormatter(TypeInfo(TClass_B)); f := CreateFormatter(TypeInfo(TClass_B));
@ -4207,6 +4208,18 @@ begin
f.SaveToStream(s); f.SaveToStream(s);
//s.SaveToFile(wstExpandLocalFileName('TTestFormatter.Test_ObjectArray.' + f.GetFormatName())); //s.SaveToFile(wstExpandLocalFileName('TTestFormatter.Test_ObjectArray.' + f.GetFormatName()));
areaded := nil;
f := CreateFormatter(TypeInfo(TClass_B));
s.Position := 0;
f.LoadFromStream(s);
x := 'Root';
f.BeginObjectRead(x,TypeInfo(TClass_B));
x := 'a';
f.Get(TypeInfo(TClass_A_Array),x,areaded);
f.EndScopeRead();
CheckNotNull(areaded);
CheckEquals(0,areaded.Length);
areaded := TClass_A_Array.Create(); areaded := TClass_A_Array.Create();
areaded.SetLength(12); areaded.SetLength(12);
f := CreateFormatter(TypeInfo(TClass_B)); f := CreateFormatter(TypeInfo(TClass_B));