Skip to content

Commit f22b362

Browse files
committed
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

Lines changed: 46 additions & 29 deletions
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

Lines changed: 4 additions & 5 deletions
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

Lines changed: 18 additions & 4 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy