From 5516bcb266c7cd013a7a43eb0069f757448e3bc9 Mon Sep 17 00:00:00 2001 From: svenbarth Date: Wed, 15 May 2019 05:28:42 +0000 Subject: [PATCH] * move check for argument/result indirection to separate function git-svn-id: trunk@42067 - --- packages/libffi/src/ffi.manager.pp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/libffi/src/ffi.manager.pp b/packages/libffi/src/ffi.manager.pp index b2cda12f03..f41b93d5f1 100644 --- a/packages/libffi/src/ffi.manager.pp +++ b/packages/libffi/src/ffi.manager.pp @@ -280,7 +280,7 @@ begin Result := @ffi_type_pointer; end; -function ValueToFFIValue(constref aValue: Pointer; aKind: TTypeKind; aFlags: TParamFlags; aIsResult: Boolean): Pointer; +function ArgIsIndirect(aKind: TTypeKind; aFlags: TParamFlags; aIsResult: Boolean): Boolean; const ResultTypeNeedsIndirection = [ tkAString, @@ -290,12 +290,20 @@ const tkDynArray ]; begin - Result := aValue; + Result := False; if (aKind = tkSString) or (aIsResult and (aKind in ResultTypeNeedsIndirection)) or (aFlags * [pfArray, pfOut, pfVar, pfConstRef] <> []) or ((aKind = tkUnknown) and (pfConst in aFlags)) then - Result := @aValue; + Result := True; +end; + +function ValueToFFIValue(constref aValue: Pointer; aKind: TTypeKind; aFlags: TParamFlags; aIsResult: Boolean): Pointer; +begin + if ArgIsIndirect(aKind, aFlags, aIsResult) then + Result := @aValue + else + Result := aValue; end; procedure FFIValueToValue(Source, Dest: Pointer; TypeInfo: PTypeInfo);