From 10ee3da8f0110ecce6460d1c0ef2c00fe9eeab06 Mon Sep 17 00:00:00 2001 From: inoussa Date: Tue, 30 Jun 2015 01:15:11 +0000 Subject: [PATCH] Empty arrays should be created. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4199 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- wst/trunk/base_service_intf.pas | 6 ++++-- wst/trunk/object_serializer.pas | 4 +++- wst/trunk/tests/test_suite/testformatter_unit.pas | 15 ++++++++++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/wst/trunk/base_service_intf.pas b/wst/trunk/base_service_intf.pas index 5e9bb024a..ca46105ae 100644 --- a/wst/trunk/base_service_intf.pas +++ b/wst/trunk/base_service_intf.pas @@ -2674,11 +2674,11 @@ begin end else begin itmName := AName; end; + if (AObject = nil) then + AObject := Create(); len := AStore.BeginArrayRead(AName,ATypeInfo,styl,itmName); if ( len >= 0 ) then begin Try - If Not Assigned(AObject) Then - AObject := Create(); itmTypInfo := PTypeInfo(GetItemClass().ClassInfo); nativObj := AObject as TBaseObjectArrayRemotable; If ( len > 0 ) Then Begin @@ -3577,6 +3577,8 @@ begin end else begin itmName := AName; end; + if (AObject = nil) and Self.InheritsFrom(TBaseArrayRemotable) then + AObject := Create(); len := AStore.BeginArrayRead(AName,ATypeInfo, GetStyle(),itmName); if ( len > 0 ) then begin try diff --git a/wst/trunk/object_serializer.pas b/wst/trunk/object_serializer.pas index 37ad91a8c..361515414 100644 --- a/wst/trunk/object_serializer.pas +++ b/wst/trunk/object_serializer.pas @@ -1480,12 +1480,14 @@ var i, c : Integer; locSerInfo : TPropSerializationInfo; begin + if (AObject = nil) and Target.InheritsFrom(TBaseArrayRemotable) then + AObject := Target.Create(); oldSS := AStore.GetSerializationStyle(); if ( osoDontDoBeginRead in Options ) or ( AStore.BeginObjectRead(AName,ATypeInfo) >= 0 ) then begin try if AStore.IsCurrentScopeNil() then Exit; // ???? FreeAndNil(AObject); - if not Assigned(AObject) then + if (AObject = nil) then AObject := Target.Create(); c := FSerializationInfos.Count; if ( c > 0 ) then begin diff --git a/wst/trunk/tests/test_suite/testformatter_unit.pas b/wst/trunk/tests/test_suite/testformatter_unit.pas index ce357841f..b31540d11 100644 --- a/wst/trunk/tests/test_suite/testformatter_unit.pas +++ b/wst/trunk/tests/test_suite/testformatter_unit.pas @@ -3371,7 +3371,8 @@ begin x := 'a'; f.Get(TypeInfo(TArrayOfStringRemotable),x,a); f.EndScopeRead(); - CheckNull(a); + CheckNotNull(a); + CheckEquals(0,a.Length); a := TArrayOfStringRemotable.Create(); f := CreateFormatter(TypeInfo(TClass_B)); @@ -4207,6 +4208,18 @@ begin f.SaveToStream(s); //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.SetLength(12); f := CreateFormatter(TypeInfo(TClass_B));