Sven Barth wrote 28 lines
Am 22.08.2016 15:16 schrieb "Michael Van Canneyt" :
>
>
>
> On Mon, 22 Aug 2016, Dave Connolly wrote:
>
>>> From what I can see the error seems to involve these two lines in the
>>
>> procedure TBaseObject.SetObjectProperty(P: PPropInfo; AValue:
TJSONObject);
>> in restbase.pp (fcl-web)
>>
>> PA:=@(pdynarraytypeinfo(P^.PropType)^.elesize)+i;
>> PA:=@(pdynarraytypeinfo(P^.PropType)^.eletype)+i;
>>
>>
>> AN:=PTYpeInfo(PA^)^.Name;
>>
>> In my scenario the PTYpeInfo(PA^)^.Name is ""
>>
>> FPC 3.1.1 revision 34368
>
>
> I suspect this has to do with the additional level of indirection added by
> Sven Barth. I will need to check that.
Best don't use pdynarraytypeinfo as that doesn't correctly handle alignment
either, use PTypeData instead.
So what should this be changed to:
i:=Length(P^.PropType^.name);
PA:=@(pdynarraytypeinfo(P^.PropType)^.eletype)+i;
ET:=PTYpeInfo(PA^);
if (ET^.Kind=tkClass) then
begin
// get object type name
AN:=ET^.Name;
// Free all objects
O:=TObjectArray(AP);
For I:=0 to Length(O)-1 do
FreeAndNil(O[i]);
end;
// Clear array
{$ifdef ver2_6}
LPN:=Lowercase(P^.Name);
SetArrayLength(LPN,0);
{$else}
I:=0;
DynArraySetLength(AP,P^.PropType,1,@i);
{$endif}
// Now, set new length
Michael.