Skip to content

Commit f22b362

Browse files
committedFeb 17, 2020
Removed all FPC warnings
1 parent b5fbaa7 commit f22b362

File tree

3 files changed

+68
-38
lines changed

3 files changed

+68
-38
lines changed
 

‎PythonForDelphi/Components/Sources/Core/PythonEngine.pas

+46-29
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@
6565
{$ENDIF}
6666

6767
{$IF defined(LINUX) or (defined(BSD) and not defined(DARWIN)) or defined(SOLARIS) or defined(HAIKU)}
68-
{$define _so_files}
69-
{$ENDIF}
68+
{$define _so_files}
69+
{$ENDIF}
7070

7171
interface
7272

@@ -2190,14 +2190,18 @@ TPythonEngine = class(TPythonInterface)
21902190
procedure Finalize;
21912191
procedure Lock;
21922192
procedure Unlock;
2193-
procedure SetPythonHome(const PythonHome: string);
2194-
procedure SetProgramName(const ProgramName: string);
2193+
procedure SetPythonHome(const PythonHome: UnicodeString);
2194+
procedure SetProgramName(const ProgramName: UnicodeString);
21952195
function IsType(ob: PPyObject; obt: PPyTypeObject): Boolean;
21962196
function GetAttrString(obj: PPyObject; AName: PAnsiChar):PAnsiChar;
21972197
function Run_CommandAsString(const command : AnsiString; mode : Integer) : string;
21982198
function Run_CommandAsObject(const command : AnsiString; mode : Integer) : PPyObject;
21992199
function Run_CommandAsObjectWithDict(const command : AnsiString; mode : Integer; locals, globals : PPyObject) : PPyObject;
2200-
function EncodeString (const str: string): AnsiString;
2200+
function EncodeString (const str: UnicodeString): AnsiString; {$IFDEF FPC}overload;{$ENDIF}
2201+
{$IFDEF FPC}
2202+
overload;
2203+
function EncodeString (const str: AnsiString): AnsiString; overload;
2204+
{$ENDIF}
22012205
function EncodeWindowsFilePath (const str: string): AnsiString;
22022206
procedure ExecString(const command : AnsiString); overload;
22032207
procedure ExecStrings( strings : TStrings ); overload;
@@ -2353,7 +2357,7 @@ TEventDef = class(TCollectionItem)
23532357
FTmpDocString: AnsiString;
23542358
FOnExecute: TPythonEvent;
23552359
FDocString: TStringList;
2356-
procedure SetDocString(const Value: TStringList);
2360+
procedure SetDocString(const Value: TStringList);
23572361
protected
23582362
function GetDisplayName: string; override;
23592363
procedure SetDisplayName(const Value: string); override;
@@ -3238,7 +3242,7 @@ procedure TPythonInputOutput.WriteLine( const str : IOString );
32383242

32393243
procedure TPythonInputOutput.AddWrite( const str : IOString );
32403244
begin
3241-
FQueue.Add( str );
3245+
FQueue.Add( string(str) );
32423246
if FQueue.Count > FMaxLines then
32433247
FQueue.Delete(0)
32443248
else
@@ -3292,12 +3296,12 @@ function TPythonInputOutput.GetCurrentThreadSlotIdx : Integer;
32923296

32933297
function TPythonInputOutput.GetCurrentThreadLine : IOString;
32943298
begin
3295-
Result := FLinesPerThread.Strings[ GetCurrentThreadSlotIdx ];
3299+
Result := IOString(FLinesPerThread.Strings[ GetCurrentThreadSlotIdx ]);
32963300
end;
32973301

32983302
procedure TPythonInputOutput.UpdateCurrentThreadLine;
32993303
begin
3300-
FLinesPerThread.Strings[ GetCurrentThreadSlotIdx ] := FLine_Buffer;
3304+
FLinesPerThread.Strings[ GetCurrentThreadSlotIdx ] := string(FLine_Buffer);
33013305
end;
33023306

33033307
(*******************************************************)
@@ -3311,12 +3315,18 @@ procedure TDynamicDll.DoOpenDll(const aDllName : string);
33113315
if not IsHandleValid then
33123316
begin
33133317
FDllName := aDllName;
3318+
{$IFDEF MSWINDOWS}
33143319
FDLLHandle := SafeLoadLibrary(
33153320
{$IFDEF FPC}
3316-
PAnsiChar(AnsiString(GetDllPath+DllName))
3321+
PAnsiChar(AnsiString(GetDllPath+DllName))
33173322
{$ELSE}
3318-
GetDllPath+DllName
3323+
GetDllPath+DllName
33193324
{$ENDIF}
3325+
{$ELSE}
3326+
//Linux: need here RTLD_GLOBAL, so Python can do "import ctypes"
3327+
FDLLHandle := THandle(dlopen(PAnsiChar(AnsiString(GetDllPath+DllName)),
3328+
RTLD_LAZY+RTLD_GLOBAL));
3329+
{$ENDIF}
33203330
);
33213331
end;
33223332
end;
@@ -3469,11 +3479,7 @@ procedure TDynamicDll.Quit;
34693479
ExitProcess( 1 );
34703480
{$ELSE}
34713481
WriteLn(ErrOutput, GetQuitMessage);
3472-
{$IFDEF FPC}
34733482
Halt( 1 );
3474-
{$ELSE}
3475-
__exit(1);
3476-
{$ENDIF}
34773483
{$ENDIF}
34783484
end;
34793485
end;
@@ -4716,7 +4722,7 @@ procedure TPythonEngine.DoOpenDll(const aDllName : string);
47164722
for i:= Integer(COMPILED_FOR_PYTHON_VERSION_INDEX) downto 1 do
47174723
begin
47184724
RegVersion := PYTHON_KNOWN_VERSIONS[i].RegVersion;
4719-
FDLLHandle := SafeLoadLibrary(GetDllPath+PYTHON_KNOWN_VERSIONS[i].DllName);
4725+
inherited DoOpenDll(PYTHON_KNOWN_VERSIONS[i].DllName);
47204726
if IsHandleValid then
47214727
begin
47224728
DllName := PYTHON_KNOWN_VERSIONS[i].DllName;
@@ -4848,7 +4854,7 @@ procedure TPythonEngine.Initialize;
48484854
if Assigned(Py_SetProgramName3000) then
48494855
begin
48504856
if FProgramNameW = '' then
4851-
FProgramNameW := ParamStr(0);
4857+
FProgramNameW := UnicodeString(ParamStr(0));
48524858
Py_SetProgramName3000(PWideChar(FProgramNameW));
48534859
end
48544860
end else begin
@@ -5050,7 +5056,7 @@ procedure TPythonEngine.SetProgramArgs;
50505056
// get the strings
50515057
// build the PAnsiChar array
50525058
for i := 0 to argc do begin
5053-
WL[i] := ParamStr(i);
5059+
WL[i] := UnicodeString(ParamStr(i));
50545060
wargv^[i] := PWideChar(WL[i]);
50555061
end;
50565062
// set the argv list of the sys module with the application arguments
@@ -5123,13 +5129,13 @@ procedure TPythonEngine.SetPyFlags(const Value: TPythonFlags);
51235129
end; // of if
51245130
end;
51255131

5126-
procedure TPythonEngine.SetPythonHome(const PythonHome: string);
5132+
procedure TPythonEngine.SetPythonHome(const PythonHome: UnicodeString);
51275133
begin
51285134
FPythonHomeW := PythonHome;
51295135
FPythonHome := EncodeString(PythonHome);
51305136
end;
51315137

5132-
procedure TPythonEngine.SetProgramName(const ProgramName: string);
5138+
procedure TPythonEngine.SetProgramName(const ProgramName: UnicodeString);
51335139
begin
51345140
FProgramNameW := ProgramName;
51355141
FProgramName := EncodeString(ProgramName);
@@ -5287,12 +5293,12 @@ function TPythonEngine.Run_CommandAsObjectWithDict(const command : AnsiString; m
52875293

52885294
procedure TPythonEngine.ExecStrings( strings : TStrings );
52895295
begin
5290-
Py_XDecRef( Run_CommandAsObject( EncodeString(strings.Text) , file_input ) );
5296+
Py_XDecRef( Run_CommandAsObject( EncodeString(strings.Text) , file_input ) );
52915297
end;
52925298

52935299
function TPythonEngine.EvalStrings( strings : TStrings ) : PPyObject;
52945300
begin
5295-
Result := Run_CommandAsObject( EncodeString(strings.Text) , eval_input );
5301+
Result := Run_CommandAsObject( EncodeString(strings.Text) , eval_input );
52965302
end;
52975303

52985304
procedure TPythonEngine.ExecString(const command : AnsiString; locals, globals : PPyObject );
@@ -5302,7 +5308,7 @@ procedure TPythonEngine.ExecString(const command : AnsiString; locals, globals :
53025308

53035309
procedure TPythonEngine.ExecStrings( strings : TStrings; locals, globals : PPyObject );
53045310
begin
5305-
Py_XDecRef( Run_CommandAsObjectWithDict( EncodeString(strings.Text), file_input, locals, globals ) );
5311+
Py_XDecRef( Run_CommandAsObjectWithDict( EncodeString(strings.Text), file_input, locals, globals ) );
53065312
end;
53075313

53085314
function TPythonEngine.EvalString( const command : AnsiString; locals, globals : PPyObject ) : PPyObject;
@@ -5312,12 +5318,12 @@ function TPythonEngine.EvalString( const command : AnsiString; locals, globals :
53125318

53135319
function TPythonEngine.EvalStrings( strings : TStrings; locals, globals : PPyObject ) : PPyObject;
53145320
begin
5315-
Result := Run_CommandAsObjectWithDict( EncodeString(strings.Text), eval_input, locals, globals );
5321+
Result := Run_CommandAsObjectWithDict( EncodeString(strings.Text), eval_input, locals, globals );
53165322
end;
53175323

53185324
function TPythonEngine.EvalStringsAsStr( strings : TStrings ) : string;
53195325
begin
5320-
Result := Run_CommandAsString( EncodeString(strings.Text), eval_input );
5326+
Result := Run_CommandAsString( EncodeString(strings.Text), eval_input );
53215327
end;
53225328

53235329
function TPythonEngine.CheckEvalSyntax( const str : AnsiString ) : Boolean;
@@ -5570,7 +5576,7 @@ function TPythonEngine.PyObjectAsString( obj : PPyObject ) : string;
55705576
if PyUnicode_Check(obj) then
55715577
begin
55725578
w := PyUnicode_AsWideString(obj);
5573-
Result := w;
5579+
Result := string(w);
55745580
Exit;
55755581
end;
55765582
s := PyObject_Str( obj );
@@ -5656,14 +5662,21 @@ function TPythonEngine.FindClient( const aName : string ) : TEngineClient;
56565662
end;
56575663
end;
56585664

5659-
function TPythonEngine.EncodeString(const str: string): AnsiString;
5665+
function TPythonEngine.EncodeString(const str: UnicodeString): AnsiString; {$IFDEF FPC}overload;{$ENDIF}
56605666
begin
56615667
if IsPython3000 then
56625668
Result := UTF8Encode(str)
56635669
else
56645670
Result := AnsiString(str);
56655671
end;
56665672

5673+
{$IFDEF FPC}
5674+
function TPythonEngine.EncodeString (const str: AnsiString): AnsiString; overload;
5675+
begin
5676+
Result := str;
5677+
end;
5678+
{$ENDIF}
5679+
56675680
function TPythonEngine.EncodeWindowsFilePath(const str: string): AnsiString;
56685681
{PEP 529}
56695682
begin
@@ -6558,7 +6571,7 @@ function TPythonEngine.PyString_FromDelphiString(str: string): PPyObject;
65586571
begin
65596572
if IsPython3000 then
65606573
begin
6561-
Result := PyUnicode_FromWideString(str);
6574+
Result := PyUnicode_FromWideString(UnicodeString(str));
65626575
end
65636576
else
65646577
Result := DLL_PyString_FromString(PAnsiChar(AnsiString(str)));
@@ -9526,7 +9539,7 @@ function pyio_write(self, args : PPyObject) : PPyObject;
95269539
IO.Write(PyUnicode_AsWideString(a1))
95279540
else
95289541
if PyString_Check(a1) then
9529-
IO.Write(PyObjectAsString(a1));
9542+
IO.Write(IOString(PyObjectAsString(a1)));
95309543
end;
95319544
Result := ReturnNone;
95329545
end
@@ -9773,7 +9786,11 @@ function CleanString(const s : AnsiString; AppendLF : Boolean) : AnsiString;
97739786

97749787
function CleanString(const s : UnicodeString; AppendLF : Boolean) : UnicodeString;
97759788
begin
9789+
{$IFDEF FPC}
9790+
Result := UnicodeString(AdjustLineBreaks(AnsiString(s), tlbsLF));
9791+
{$ELSE}
97769792
Result := AdjustLineBreaks(s, tlbsLF);
9793+
{$ENDIF}
97779794
if AppendLF and (result[length(result)] <> LF) then
97789795
Result := Result + LF;
97799796
end;

‎PythonForDelphi/Components/Sources/Core/PythonGUIInputOutput.pas

+4-5
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ procedure TPythonGUIInputOutput.SendUniData(const Data: UnicodeString);
137137
if Assigned(FOnSendUniData) then
138138
inherited
139139
else
140-
DisplayString( Data );
140+
DisplayString( string(Data) );
141141
end;
142142

143143
{------------------------------------------------------------------------------}
@@ -163,7 +163,7 @@ function TPythonGUIInputOutput.ReceiveUniData: UnicodeString;
163163
else
164164
begin
165165
InputQuery( 'Query from Python', 'Enter text', S);
166-
Result := S;
166+
Result := UnicodeString(S);
167167
end;
168168
end;
169169

@@ -178,7 +178,7 @@ procedure TPythonGUIInputOutput.AddPendingWrite;
178178
{------------------------------------------------------------------------------}
179179
procedure TPythonGUIInputOutput.WriteOutput;
180180
var
181-
S : IOString;
181+
S : string;
182182
begin
183183
if FQueue.Count = 0 then
184184
Exit;
@@ -233,9 +233,8 @@ procedure TPythonGUIInputOutput.DisplayString( const str : string );
233233
TMyCustomMemo(Output).Lines.Add(str);
234234
{$IFDEF MSWINDOWS}
235235
SendMessage( Output.Handle, em_ScrollCaret, 0, 0);
236-
//SendMessage( Output.Handle, EM_LINESCROLL, 0, Output.Lines.Count);
237236
{$ENDIF}
238-
end;{if}
237+
end;
239238
end;
240239

241240
{------------------------------------------------------------------------------}

‎PythonForDelphi/Components/Sources/Core/VarPyth.pas

+18-4
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ function NewPythonDict: Variant;
100100
// Not really needed since you can assign a PythonVariant to a string anyway
101101
// but it is slightly faster and in some places avoids the declaration of a variable
102102
function VarPythonAsString(AValue : Variant) : string;
103+
{$IFDEF FPC}
104+
// to work around http://mantis.freepascal.org/view.php?id=20849)
105+
function VarPythonToVariant(AValue : Variant): Variant;
106+
{$ENDIF}
103107

104108
function None : Variant;
105109
function Ellipsis : Variant;
@@ -128,9 +132,9 @@ TNamedParamDesc = record
128132
{$DEFINE USESYSTEMDISPINVOKE} //Delphi 2010 DispInvoke is buggy
129133
{$DEFINE PATCHEDSYSTEMDISPINVOKE} //To correct memory leaks
130134
{$ENDIF}
131-
{.$IF DEFINED(FPC_FULLVERSION) and (FPC_FULLVERSION >= 20500)}
132-
{.$DEFINE USESYSTEMDISPINVOKE}
133-
{.$IFEND}
135+
{$IF DEFINED(FPC_FULLVERSION) and (FPC_FULLVERSION >= 20500)}
136+
{$DEFINE USESYSTEMDISPINVOKE}
137+
{$IFEND}
134138

135139
{ Python variant type handler }
136140
TPythonVariantType = class(TInvokeableVariantType, IVarInstanceReference)
@@ -656,6 +660,16 @@ function VarPythonAsString(AValue : Variant) : string;
656660
Result := AValue;
657661
end;
658662

663+
{$IFDEF FPC}
664+
function VarPythonToVariant(AValue : Variant): Variant;
665+
begin
666+
if VarIsPython(AValue) then
667+
Result :=
668+
GetPythonEngine.PyObjectAsVariant(TPythonVarData(AValue).VPython.PyObject)
669+
else
670+
Result := AValue;
671+
end;
672+
{$ENDIF}
659673

660674
function None : Variant;
661675
begin
@@ -2249,7 +2263,7 @@ function TPythonData.GetAsWideString: UnicodeString;
22492263
if Assigned(PyObject) and GetPythonEngine.PyUnicode_Check(PyObject) then
22502264
Result := GetPythonEngine.PyUnicode_AsWideString(PyObject)
22512265
else
2252-
Result := GetAsString;
2266+
Result := UnicodeString(GetAsString);
22532267
end;
22542268

22552269
function TPythonData.GreaterOrEqualThan(const Right: TPythonData): Boolean;

0 commit comments

Comments
 (0)
Failed to load comments.