You are not logged in.
This discussion is about how we may fix/include in mORMot.pas one of the latest breaking change in trunk.
http://wiki.freepascal.org/User_Changes … e_pointers states:
Dynamic array parameters are passed like pointers
Old behaviour: When using the default calling convention, dynamic array parameters were passed on the stack.
New behaviour: When using the default calling convention, dynamic array parameters are now passed like a pointer (which may be in a register).
Reason: Delphi compatibility, ensuring that SetPointerProp can be used with dynamic arrays.
Remedy: Adjust pure assembler routines that have dynamic array parameters.
svn: 30870, 30878, 31622
I guess we have to remove $ifdef FPC in the following statement:
if (ValueType in [smvRecord{$ifndef NOVARIANTS},smvVariant{$endif}
{$ifdef FPC},smvDynArray{$endif}]) or
(ValueDirection in [smdVar,smdOut]) or
((ValueDirection=smdResult) and (ValueType in CONST_ARGS_RESULT_BY_REF)) then
Include(ValueKindAsm,vPassedByReference);
Then we should fix also
case ValueType of
smvDynArray:
{$ifdef FPC} // FIXME ?
if vIsObjArray in ValueKindAsm then
DynArrays[IndexVar].Init(ArgTypeInfo,V^) else
DynArrays[IndexVar].Init(ArgTypeInfo,V);
{$else}
DynArrays[IndexVar].Init(ArgTypeInfo,V^);
{$endif}
and
// alf: TODO: fix smvDynArray as expected by fpc\compiler\i386\cpupara.pas
{$ifdef FPC}or ((ValueType in [smvRecord,smvDynArray]) and
not (vPassedByReference in ValueKindAsm)){$endif} then begin
// this parameter would go on the stack
InStackOffset := ArgsSizeInStack;
inc(ArgsSizeInStack,SizeInStack);
end else begin
Offline
The change for dynamic arrays is right move. The topic is quiet old. See my post (in 2013 my post was +/- ignored...):
http://lists.freepascal.org/fpc-devel/2 … 32586.html
You can try to track how it is done in PascalScript (with my patch for this breaking change):
http://forum.lazarus.freepascal.org/ind … #msg196402
http://bugs.freepascal.org/view.php?id=29230
best regards,
Maciej Izak
Offline
If the weather remains as bad as it is right now, I will have a look at it again ... ;-)
Tests will be done with FPC fixes (3.0.1/3.0.2) and FPC trunk (with PPTypeInfo).
Offline