Skip to content

Commit a6b8759

Browse files
committed
Minor improvements, type corrections, and added comments.
tp_compare is not available in Python 3.
1 parent 7e3c66d commit a6b8759

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

Source/PythonEngine.pas

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -540,9 +540,9 @@ TPythonVersionProp = record
540540
sq_concat : binaryfunc;
541541
sq_repeat : ssizeargfunc;
542542
sq_item : ssizeargfunc;
543-
sq_slice : ssizessizeargfunc;
543+
sq_slice : ssizessizeargfunc; // empty slot in python 3.x
544544
sq_ass_item : ssizeobjargproc;
545-
sq_ass_slice : ssizessizeobjargproc;
545+
sq_ass_slice : ssizessizeobjargproc; // empty slot in python 3.x
546546
sq_contains : objobjproc;
547547
sq_inplace_concat : binaryfunc;
548548
sq_inplace_repeat : ssizeargfunc;
@@ -556,6 +556,8 @@ TPythonVersionProp = record
556556
end;
557557
PPyMappingMethods = ^PyMappingMethods;
558558

559+
// PyBufferProcs has changed drastiacally in Python 3.0 but since
560+
// it is currently not implemented it does not matter
559561
PyBufferProcs = {$IFNDEF CPUX64}packed{$ENDIF} record
560562
bf_getreadbuffer : getreadbufferproc;
561563
bf_getwritebuffer : getwritebufferproc;
@@ -804,7 +806,7 @@ TPythonVersionProp = record
804806
tp_subclasses : PPyObject;
805807
tp_weaklist : PPyObject;
806808
tp_del : PyDestructor;
807-
tp_version_tag : NativeUInt; // Type attribute cache version tag. Added in version 2.6
809+
tp_version_tag : Cardinal; // Type attribute cache version tag. Added in version 2.6
808810
tp_finalize : PyDestructor;
809811
//More spares
810812
tp_xxx1 : NativeInt;
@@ -1786,8 +1788,8 @@ TPythonInterface=class(TDynamicDll)
17861788
PyLong_FromDouble:function (db:double):PPyObject; cdecl;
17871789
PyLong_FromLong:function (l:LongInt):PPyObject; cdecl;
17881790
PyLong_FromString:function (pc:PAnsiChar;var ppc:PAnsiChar;i:integer):PPyObject; cdecl;
1789-
PyLong_FromUnsignedLong:function(val:cardinal) : PPyObject; cdecl;
1790-
PyLong_AsUnsignedLong:function(ob:PPyObject) : Cardinal; cdecl;
1791+
PyLong_FromUnsignedLong:function(val:LongWord) : PPyObject; cdecl;
1792+
PyLong_AsUnsignedLong:function(ob:PPyObject) : LongWord; cdecl;
17911793
PyLong_FromUnicode:function(ob:PPyObject; a, b : integer) : PPyObject; cdecl;
17921794
PyLong_FromLongLong:function(val:Int64) : PPyObject; cdecl;
17931795
PyLong_AsLongLong:function(ob:PPyObject) : Int64; cdecl;
@@ -2822,7 +2824,7 @@ TPyObject = class
28222824
end;
28232825
TPyObjectClass = class of TPyObject;
28242826

2825-
TBasicServices = set of (bsPrint, bsGetAttr, bsSetAttr,
2827+
TBasicServices = set of (bsGetAttr, bsSetAttr,
28262828
bsRepr, bsCompare, bsHash,
28272829
bsStr, bsGetAttrO, bsSetAttrO,
28282830
bsCall,
@@ -8769,6 +8771,7 @@ function TPythonType_SqInplaceRepeat(pSelf : PPyObject; i: NativeInt): PPyObject
87698771
end;
87708772

87718773
procedure TPythonType.InitServices;
8774+
{ Called from TPythonType.Initialize which first calls CheckEngine - FEngine is alread assigned }
87728775
begin
87738776
with FType do
87748777
begin
@@ -8788,7 +8791,7 @@ procedure TPythonType.InitServices;
87888791
tp_repr := TPythonType_Repr;
87898792
if bsStr in Services.Basic then
87908793
tp_str := TPythonType_Str;
8791-
if bsCompare in Services.Basic then
8794+
if (bsCompare in Services.Basic) and not FEngine.IsPython3000 then
87928795
tp_compare := TPythonType_Compare;
87938796
if bsHash in Services.Basic then
87948797
tp_hash := TPythonType_Hash;
@@ -8822,7 +8825,7 @@ procedure TPythonType.InitServices;
88228825
// Number services
88238826
if Services.Number <> [] then
88248827
begin
8825-
if GetPythonEngine.IsPython3000 then
8828+
if FEngine.IsPython3000 then
88268829
begin
88278830
FNumber := AllocMem(SizeOf(PyNumberMethods300)); // zeroes memory
88288831
with PPyNumberMethods300(FNumber)^ do
@@ -8833,8 +8836,8 @@ procedure TPythonType.InitServices;
88338836
if nsDivide in Services.Number then; // gone in Python 3.x
88348837
if nsFloorDivide in Services.Number then nb_floor_divide := TPythonType_NbFloorDivide; // #3.30
88358838
if nsTrueDivide in Services.Number then nb_true_divide := TPythonType_NbTrueDivide; // #3.31
8836-
if (nsMatrixMultiply in Services.Number) and ((GetPythonEngine.MajorVersion > 3)
8837-
or ((GetPythonEngine.MajorVersion = 3) and (GetPythonEngine.MinorVersion >= 5)))
8839+
if (nsMatrixMultiply in Services.Number) and ((FEngine.MajorVersion > 3)
8840+
or ((FEngine.MajorVersion = 3) and (FEngine.MinorVersion >= 5)))
88388841
then
88398842
nb_matrix_multiply := TPythonType_NbMatrixMultiply; // #3.35
88408843
if nsRemainder in Services.Number then nb_remainder := TPythonType_NbRemainder; // #3.4
@@ -8871,8 +8874,8 @@ procedure TPythonType.InitServices;
88718874
if nsInplaceXor in Services.InplaceNumber then nb_inplace_xor := TPythonType_NbInplaceXor; // #3.28
88728875
if nsInplaceOr in Services.InplaceNumber then nb_inplace_or := TPythonType_NbInplaceOr; // #3.29
88738876
if (nsInplaceMatrixMultiply in Services.InplaceNumber) and
8874-
((GetPythonEngine.MajorVersion > 3) or ((GetPythonEngine.MajorVersion = 3)
8875-
and (GetPythonEngine.MinorVersion >= 5)))
8877+
((FEngine.MajorVersion > 3) or ((FEngine.MajorVersion = 3)
8878+
and (FEngine.MinorVersion >= 5)))
88768879
then
88778880
nb_inplace_matrix_multiply := TPythonType_NbInplaceMatrixMultiply; // #3.36
88788881
end;
@@ -9749,9 +9752,8 @@ function GetPythonEngine : TPythonEngine;
97499752
begin
97509753
if not Assigned( gPythonEngine ) then
97519754
raise Exception.Create( 'No Python engine was created' );
9752-
if not gPythonEngine.Finalizing then
9753-
if not gPythonEngine.Initialized then
9754-
raise Exception.Create( 'The Python engine is not properly initialized' );
9755+
if not gPythonEngine.Finalizing and not gPythonEngine.Initialized then
9756+
raise Exception.Create( 'The Python engine is not properly initialized' );
97559757
Result := gPythonEngine;
97569758
end;
97579759

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