Skip to content

Commit 6742937

Browse files
committed
Dropping support for 2.4, 3.0, 3.1
Working around 3.8 bug failing to publish Py_CompileString and PyParse_SimpleParseString.
1 parent 4621457 commit 6742937

File tree

2 files changed

+54
-97
lines changed

2 files changed

+54
-97
lines changed

PythonForDelphi/Components/Sources/Core/Definition.Inc

Lines changed: 6 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,9 @@
2626
// modify the default Python version below, in the Python versions section.
2727
/////////////////////////////////////////////////////////////////////////////
2828

29-
//{$DEFINE PYTHON24}
3029
//{$DEFINE PYTHON25}
3130
//{$DEFINE PYTHON26}
3231
//{$DEFINE PYTHON27}
33-
//{$DEFINE PYTHON30}
34-
//{$DEFINE PYTHON31}
3532
//{$DEFINE PYTHON32}
3633
//{$DEFINE PYTHON33}
3734
//{$DEFINE PYTHON34}
@@ -426,18 +423,12 @@
426423
{$IFNDEF PYTHON34}
427424
{$IFNDEF PYTHON33}
428425
{$IFNDEF PYTHON32}
429-
{$IFNDEF PYTHON31}
430-
{$IFNDEF PYTHON30}
431-
{$IFNDEF PYTHON27}
432-
{$IFNDEF PYTHON26}
433-
{$IFNDEF PYTHON25}
434-
{$IFNDEF PYTHON24}
435-
{---<START OF DEFAULT PYTHON VERSION>---}
436-
{$DEFINE PYTHON27}
437-
{---<END OF DEFAULT PYTHON VERSION>---}
438-
{$ENDIF}
439-
{$ENDIF}
440-
{$ENDIF}
426+
{$IFNDEF PYTHON27}
427+
{$IFNDEF PYTHON26}
428+
{$IFNDEF PYTHON25}
429+
{---<START OF DEFAULT PYTHON VERSION>---}
430+
{$DEFINE PYTHON27}
431+
{---<END OF DEFAULT PYTHON VERSION>---}
441432
{$ENDIF}
442433
{$ENDIF}
443434
{$ENDIF}
@@ -449,101 +440,62 @@
449440
{$ENDIF}
450441
{$ENDIF}
451442

452-
{$IFDEF PYTHON24}
453-
{$DEFINE PYTHON24_OR_HIGHER}
454-
{$ENDIF}
455443
{$IFDEF PYTHON25}
456-
{$DEFINE PYTHON24_OR_HIGHER}
457444
{$DEFINE PYTHON25_OR_HIGHER}
458445
{$ENDIF}
459446
{$IFDEF PYTHON26}
460-
{$DEFINE PYTHON24_OR_HIGHER}
461447
{$DEFINE PYTHON25_OR_HIGHER}
462448
{$DEFINE PYTHON26_OR_HIGHER}
463449
{$ENDIF}
464450
{$IFDEF PYTHON27}
465-
{$DEFINE PYTHON24_OR_HIGHER}
466-
{$DEFINE PYTHON25_OR_HIGHER}
467-
{$DEFINE PYTHON26_OR_HIGHER}
468-
{$DEFINE PYTHON27_OR_HIGHER}
469-
{$ENDIF}
470-
{$IFDEF PYTHON30}
471-
{$DEFINE PYTHON24_OR_HIGHER}
472-
{$DEFINE PYTHON25_OR_HIGHER}
473-
{$DEFINE PYTHON26_OR_HIGHER}
474-
{$DEFINE PYTHON27_OR_HIGHER}
475-
{$DEFINE PYTHON30_OR_HIGHER}
476-
{$ENDIF}
477-
{$IFDEF PYTHON31}
478-
{$DEFINE PYTHON24_OR_HIGHER}
479451
{$DEFINE PYTHON25_OR_HIGHER}
480452
{$DEFINE PYTHON26_OR_HIGHER}
481453
{$DEFINE PYTHON27_OR_HIGHER}
482-
{$DEFINE PYTHON30_OR_HIGHER}
483-
{$DEFINE PYTHON31_OR_HIGHER}
484454
{$ENDIF}
485455
{$IFDEF PYTHON32}
486-
{$DEFINE PYTHON24_OR_HIGHER}
487456
{$DEFINE PYTHON25_OR_HIGHER}
488457
{$DEFINE PYTHON26_OR_HIGHER}
489458
{$DEFINE PYTHON27_OR_HIGHER}
490-
{$DEFINE PYTHON30_OR_HIGHER}
491-
{$DEFINE PYTHON31_OR_HIGHER}
492459
{$DEFINE PYTHON32_OR_HIGHER}
493460
{$ENDIF}
494461
{$IFDEF PYTHON33}
495-
{$DEFINE PYTHON24_OR_HIGHER}
496462
{$DEFINE PYTHON25_OR_HIGHER}
497463
{$DEFINE PYTHON26_OR_HIGHER}
498464
{$DEFINE PYTHON27_OR_HIGHER}
499-
{$DEFINE PYTHON30_OR_HIGHER}
500-
{$DEFINE PYTHON31_OR_HIGHER}
501465
{$DEFINE PYTHON32_OR_HIGHER}
502466
{$DEFINE PYTHON33_OR_HIGHER}
503467
{$ENDIF}
504468
{$IFDEF PYTHON34}
505-
{$DEFINE PYTHON24_OR_HIGHER}
506469
{$DEFINE PYTHON25_OR_HIGHER}
507470
{$DEFINE PYTHON26_OR_HIGHER}
508471
{$DEFINE PYTHON27_OR_HIGHER}
509-
{$DEFINE PYTHON30_OR_HIGHER}
510-
{$DEFINE PYTHON31_OR_HIGHER}
511472
{$DEFINE PYTHON32_OR_HIGHER}
512473
{$DEFINE PYTHON33_OR_HIGHER}
513474
{$DEFINE PYTHON34_OR_HIGHER}
514475
{$ENDIF}
515476
{$IFDEF PYTHON35}
516-
{$DEFINE PYTHON24_OR_HIGHER}
517477
{$DEFINE PYTHON25_OR_HIGHER}
518478
{$DEFINE PYTHON26_OR_HIGHER}
519479
{$DEFINE PYTHON27_OR_HIGHER}
520-
{$DEFINE PYTHON30_OR_HIGHER}
521-
{$DEFINE PYTHON31_OR_HIGHER}
522480
{$DEFINE PYTHON32_OR_HIGHER}
523481
{$DEFINE PYTHON33_OR_HIGHER}
524482
{$DEFINE PYTHON34_OR_HIGHER}
525483
{$DEFINE PYTHON35_OR_HIGHER}
526484
{$ENDIF}
527485
{$IFDEF PYTHON36}
528-
{$DEFINE PYTHON24_OR_HIGHER}
529486
{$DEFINE PYTHON25_OR_HIGHER}
530487
{$DEFINE PYTHON26_OR_HIGHER}
531488
{$DEFINE PYTHON27_OR_HIGHER}
532-
{$DEFINE PYTHON30_OR_HIGHER}
533-
{$DEFINE PYTHON31_OR_HIGHER}
534489
{$DEFINE PYTHON32_OR_HIGHER}
535490
{$DEFINE PYTHON33_OR_HIGHER}
536491
{$DEFINE PYTHON34_OR_HIGHER}
537492
{$DEFINE PYTHON35_OR_HIGHER}
538493
{$DEFINE PYTHON36_OR_HIGHER}
539494
{$ENDIF}
540495
{$IFDEF PYTHON37}
541-
{$DEFINE PYTHON24_OR_HIGHER}
542496
{$DEFINE PYTHON25_OR_HIGHER}
543497
{$DEFINE PYTHON26_OR_HIGHER}
544498
{$DEFINE PYTHON27_OR_HIGHER}
545-
{$DEFINE PYTHON30_OR_HIGHER}
546-
{$DEFINE PYTHON31_OR_HIGHER}
547499
{$DEFINE PYTHON32_OR_HIGHER}
548500
{$DEFINE PYTHON33_OR_HIGHER}
549501
{$DEFINE PYTHON34_OR_HIGHER}
@@ -552,12 +504,9 @@
552504
{$DEFINE PYTHON37_OR_HIGHER}
553505
{$ENDIF}
554506
{$IFDEF PYTHON38}
555-
{$DEFINE PYTHON24_OR_HIGHER}
556507
{$DEFINE PYTHON25_OR_HIGHER}
557508
{$DEFINE PYTHON26_OR_HIGHER}
558509
{$DEFINE PYTHON27_OR_HIGHER}
559-
{$DEFINE PYTHON30_OR_HIGHER}
560-
{$DEFINE PYTHON31_OR_HIGHER}
561510
{$DEFINE PYTHON32_OR_HIGHER}
562511
{$DEFINE PYTHON33_OR_HIGHER}
563512
{$DEFINE PYTHON34_OR_HIGHER}

PythonForDelphi/Components/Sources/Core/PythonEngine.pas

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,10 @@ interface
129129
end;
130130
const
131131
{$IFDEF MSWINDOWS}
132-
PYTHON_KNOWN_VERSIONS: array[1..13] of TPythonVersionProp =
133-
( (DllName: 'python24.dll'; RegVersion: '2.4'; APIVersion: 1012; CanUseLatest: True),
134-
(DllName: 'python25.dll'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True),
132+
PYTHON_KNOWN_VERSIONS: array[1..10] of TPythonVersionProp =
133+
( (DllName: 'python25.dll'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True),
135134
(DllName: 'python26.dll'; RegVersion: '2.6'; APIVersion: 1013; CanUseLatest: True),
136135
(DllName: 'python27.dll'; RegVersion: '2.7'; APIVersion: 1013; CanUseLatest: True),
137-
(DllName: 'python30.dll'; RegVersion: '3.0'; APIVersion: 1013; CanUseLatest: True),
138-
(DllName: 'python31.dll'; RegVersion: '3.1'; APIVersion: 1013; CanUseLatest: True),
139136
(DllName: 'python32.dll'; RegVersion: '3.2'; APIVersion: 1013; CanUseLatest: True),
140137
(DllName: 'python33.dll'; RegVersion: '3.3'; APIVersion: 1013; CanUseLatest: True),
141138
(DllName: 'python34.dll'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True),
@@ -145,13 +142,10 @@ interface
145142
(DllName: 'python38.dll'; RegVersion: '3.8'; APIVersion: 1013; CanUseLatest: True) );
146143
{$ENDIF}
147144
{$IFDEF LINUX}
148-
PYTHON_KNOWN_VERSIONS: array[1..13] of TPythonVersionProp =
149-
( (DllName: 'libpython2.4.so'; RegVersion: '2.4'; APIVersion: 1012; CanUseLatest: True),
150-
(DllName: 'libpython2.5.so'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True),
145+
PYTHON_KNOWN_VERSIONS: array[1..10] of TPythonVersionProp =
146+
( (DllName: 'libpython2.5.so'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True),
151147
(DllName: 'libpython2.6.so'; RegVersion: '2.6'; APIVersion: 1013; CanUseLatest: True),
152148
(DllName: 'libpython2.7.so'; RegVersion: '2.7'; APIVersion: 1013; CanUseLatest: True),
153-
(DllName: 'libpython3.0.so'; RegVersion: '3.0'; APIVersion: 1013; CanUseLatest: True),
154-
(DllName: 'libpython3.1.so'; RegVersion: '3.1'; APIVersion: 1013; CanUseLatest: True),
155149
(DllName: 'libpython3.2.so'; RegVersion: '3.2'; APIVersion: 1013; CanUseLatest: True),
156150
(DllName: 'libpython3.3.so'; RegVersion: '3.3'; APIVersion: 1013; CanUseLatest: True),
157151
(DllName: 'libpython3.4.so'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True),
@@ -160,44 +154,35 @@ interface
160154
(DllName: 'libpython3.7.so'; RegVersion: '3.7'; APIVersion: 1013; CanUseLatest: True)
161155
(DllName: 'libpython3.8.so'; RegVersion: '3.8'; APIVersion: 1013; CanUseLatest: True) );
162156
{$ENDIF}
163-
{$IFDEF PYTHON24}
164-
COMPILED_FOR_PYTHON_VERSION_INDEX = 1;
165-
{$ENDIF}
166157
{$IFDEF PYTHON25}
167-
COMPILED_FOR_PYTHON_VERSION_INDEX = 2;
158+
COMPILED_FOR_PYTHON_VERSION_INDEX = 1;
168159
{$ENDIF}
169160
{$IFDEF PYTHON26}
170-
COMPILED_FOR_PYTHON_VERSION_INDEX = 3;
161+
COMPILED_FOR_PYTHON_VERSION_INDEX = 2;
171162
{$ENDIF}
172163
{$IFDEF PYTHON27}
173-
COMPILED_FOR_PYTHON_VERSION_INDEX = 4;
174-
{$ENDIF}
175-
{$IFDEF PYTHON30}
176-
COMPILED_FOR_PYTHON_VERSION_INDEX = 5;
177-
{$ENDIF}
178-
{$IFDEF PYTHON31}
179-
COMPILED_FOR_PYTHON_VERSION_INDEX = 6;
164+
COMPILED_FOR_PYTHON_VERSION_INDEX = 3;
180165
{$ENDIF}
181166
{$IFDEF PYTHON32}
182-
COMPILED_FOR_PYTHON_VERSION_INDEX = 7;
167+
COMPILED_FOR_PYTHON_VERSION_INDEX = 4;
183168
{$ENDIF}
184169
{$IFDEF PYTHON33}
185-
COMPILED_FOR_PYTHON_VERSION_INDEX = 8;
170+
COMPILED_FOR_PYTHON_VERSION_INDEX = 5;
186171
{$ENDIF}
187172
{$IFDEF PYTHON34}
188-
COMPILED_FOR_PYTHON_VERSION_INDEX = 9;
173+
COMPILED_FOR_PYTHON_VERSION_INDEX = 6;
189174
{$ENDIF}
190175
{$IFDEF PYTHON35}
191-
COMPILED_FOR_PYTHON_VERSION_INDEX = 10;
176+
COMPILED_FOR_PYTHON_VERSION_INDEX = 7;
192177
{$ENDIF}
193178
{$IFDEF PYTHON36}
194-
COMPILED_FOR_PYTHON_VERSION_INDEX = 11;
179+
COMPILED_FOR_PYTHON_VERSION_INDEX = 8;
195180
{$ENDIF}
196181
{$IFDEF PYTHON37}
197-
COMPILED_FOR_PYTHON_VERSION_INDEX = 12;
182+
COMPILED_FOR_PYTHON_VERSION_INDEX = 9;
198183
{$ENDIF}
199184
{$IFDEF PYTHON38}
200-
COMPILED_FOR_PYTHON_VERSION_INDEX = 13;
185+
COMPILED_FOR_PYTHON_VERSION_INDEX = 10;
201186
{$ENDIF}
202187
PYT_METHOD_BUFFER_INCREASE = 10;
203188
PYT_MEMBER_BUFFER_INCREASE = 10;
@@ -1071,6 +1056,11 @@ interface
10711056
n_child : PNode;
10721057
end;
10731058

1059+
PPyCompilerFlags = ^PyCompilerFlags;
1060+
PyCompilerFlags = {$IFNDEF CPUX64}packed{$ENDIF} record
1061+
flags : integer;
1062+
end;
1063+
10741064
// From weakrefobject.h
10751065

10761066
PPyWeakReference = ^PyWeakReference;
@@ -1959,7 +1949,8 @@ TPythonInterface=class(TDynamicDll)
19591949
PyThreadState_SetAsyncExc: function(t_id :LongInt; exc :PPyObject) : Integer; cdecl;
19601950
Py_AtExit:function (proc: AtExitProc):integer; cdecl;
19611951
//Py_Cleanup:procedure; cdecl;
1962-
Py_CompileString:function (s1,s2:PAnsiChar;i:integer):PPyObject; cdecl;
1952+
Py_CompileStringFlags:function (s1,s2:PAnsiChar;i:integer;flags:PPyCompilerFlags):PPyObject; cdecl;
1953+
Py_CompileStringExFlags:function (s1,s2:PAnsiChar;i:integer;flags:PPyCompilerFlags;optimize:integer):PPyObject; cdecl;
19631954
Py_FatalError:procedure(s:PAnsiChar); cdecl;
19641955
Py_FindMethod:function (md:PPyMethodDef;ob:PPyObject;key:PAnsiChar):PPyObject; cdecl;
19651956
Py_FindMethodInChain:function (mc:PPyMethodChain;ob:PPyObject;key:PAnsiChar):PPyObject; cdecl;
@@ -1980,7 +1971,7 @@ TPythonInterface=class(TDynamicDll)
19801971
Py_GetPrefix : function : PAnsiChar; cdecl;
19811972
Py_GetProgramName : function : PAnsiChar; cdecl;
19821973

1983-
PyParser_SimpleParseString : function ( str : PAnsiChar; start : Integer) : PNode; cdecl;
1974+
PyParser_SimpleParseStringFlags : function ( str : PAnsiChar; start, flags : Integer) : PNode; cdecl;
19841975
PyNode_Free : procedure( n : PNode ); cdecl;
19851976
PyErr_NewException : function ( name : PAnsiChar; base, dict : PPyObject ) : PPyObject; cdecl;
19861977
Py_Malloc : function ( size : NativeInt ) : Pointer;
@@ -2071,6 +2062,10 @@ TPythonInterface=class(TDynamicDll)
20712062
_Py_c_quot: Pointer;
20722063
_Py_c_sum: Pointer;
20732064
}
2065+
// Not exported in Python 3.8 and implemented as functions
2066+
function PyParser_SimpleParseString( str : PAnsiChar; start : Integer) : PNode; cdecl;
2067+
function Py_CompileString( s1,s2:PAnsiChar;i:integer) : PPyObject; cdecl;
2068+
20742069
// functions redefined in Delphi
20752070
procedure Py_INCREF ( op: PPyObject);
20762071
procedure Py_DECREF ( op: PPyObject);
@@ -4047,18 +4042,18 @@ procedure TPythonInterface.MapDll;
40474042
PyThreadState_SetAsyncExc :=Import('PyThreadState_SetAsyncExc');
40484043
Py_AtExit :=Import('Py_AtExit');
40494044
//Py_Cleanup :=Import('Py_Cleanup');
4050-
Py_CompileString :=Import('Py_CompileString');
40514045
Py_FatalError :=Import('Py_FatalError');
40524046
if not IsPython3000 then begin
4053-
Py_FindMethod :=Import('Py_FindMethod');
4054-
Py_FindMethodInChain :=Import('Py_FindMethodInChain');
4047+
Py_FindMethod :=Import('Py_FindMethod');
4048+
Py_FindMethodInChain :=Import('Py_FindMethodInChain');
40554049
DLL_Py_FlushLine :=Import('Py_FlushLine');
4050+
_PyString_Resize :=Import('_PyString_Resize');
4051+
Py_CompileStringFlags :=Import('Py_CompileStringFlags');
4052+
end else begin
4053+
_PyString_Resize :=Import('_PyBytes_Resize');
4054+
Py_CompileStringExFlags :=Import('Py_CompileStringExFlags');
40564055
end;
4057-
_PyObject_New :=Import('_PyObject_New');
4058-
if not IsPython3000 then
4059-
_PyString_Resize :=Import('_PyString_Resize')
4060-
else
4061-
_PyString_Resize :=Import('_PyBytes_Resize');
4056+
_PyObject_New :=Import('_PyObject_New');
40624057
Py_Finalize :=Import('Py_Finalize');
40634058
if getProcAddress( FDLLHandle, 'PyCode_Addr2Line' ) <> nil then
40644059
DLL_PyCode_Addr2Line := Import('PyCode_Addr2Line');
@@ -4082,7 +4077,7 @@ procedure TPythonInterface.MapDll;
40824077
Py_GetPythonHome :=Import('Py_GetPythonHome');
40834078
Py_GetPrefix :=Import('Py_GetPrefix');
40844079
Py_GetProgramName :=Import('Py_GetProgramName');
4085-
PyParser_SimpleParseString :=Import('PyParser_SimpleParseString');
4080+
PyParser_SimpleParseStringFlags := Import('PyParser_SimpleParseStringFlags');
40864081
PyNode_Free :=Import('PyNode_Free');
40874082
PyErr_NewException :=Import('PyErr_NewException');
40884083
/// jah 29-sep-2000 : updated for python 2.0
@@ -4121,6 +4116,19 @@ procedure TPythonInterface.MapDll;
41214116
PyGILState_Release := Import('PyGILState_Release');
41224117
end;
41234118

4119+
function TPythonInterface.Py_CompileString( s1,s2:PAnsiChar;i:integer):PPyObject; cdecl;
4120+
begin
4121+
if IsPython3000 then
4122+
Result := Py_CompileStringExFlags(s1, s2, i, nil, -1)
4123+
else
4124+
Result := Py_CompileStringFlags(s1, s2, i, nil);
4125+
end;
4126+
4127+
function TPythonInterface.PyParser_SimpleParseString( str : PAnsiChar; start : integer) : PNode; cdecl;
4128+
begin
4129+
Result := PyParser_SimpleParseStringFlags(str, start, 0);
4130+
end;
4131+
41244132
procedure TPythonInterface.Py_INCREF(op: PPyObject);
41254133
begin
41264134
Inc(op^.ob_refcnt);

0 commit comments

Comments
 (0)