@@ -95,7 +95,8 @@ interface
9595{ $IF not Defined(FPC) and (CompilerVersion >= 23)} 
9696const 
9797  { $IF CompilerVersion >= 33} 
98-     pidSupportedPlatforms = pidWin32 or  pidWin64 or  pidOSX32 or  pidOSX64 or  pidLinux64;
98+     pidSupportedPlatforms = pidWin32 or  pidWin64 or  pidOSX32 or  pidOSX64
99+                          or  pidLinux64 or  pidAndroid32Arm or  pidAndroid64Arm;
99100  { $ELSE} 
100101    pidSupportedPlatforms = pidWin32 or  pidWin64 or  pidOSX32;
101102  { $IFEND} 
@@ -402,7 +403,7 @@   TPythonVersionProp = record
402403  newfunc           = function ( subtype: PPyTypeObject; args, kwds : PPyObject) : PPyObject; cdecl;
403404  allocfunc         = function ( self: PPyTypeObject; nitems : NativeInt) : PPyObject; cdecl;
404405
405-   PyNumberMethods = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
406+   PyNumberMethods = { $IFDEF CPUX86 } packed { $ENDIF}   record 
406407     nb_add           : binaryfunc;
407408     nb_subtract      : binaryfunc;
408409     nb_multiply      : binaryfunc;
@@ -442,7 +443,7 @@   TPythonVersionProp = record
442443  end ;
443444  PPyNumberMethods = ^PyNumberMethods;
444445
445-   PySequenceMethods = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
446+   PySequenceMethods = { $IFDEF CPUX86 } packed { $ENDIF}   record 
446447     sq_length    : lenfunc;
447448     sq_concat    : binaryfunc;
448449     sq_repeat    : ssizeargfunc;
@@ -456,37 +457,37 @@   TPythonVersionProp = record
456457  end ;
457458  PPySequenceMethods = ^PySequenceMethods;
458459
459-   PyMappingMethods = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
460+   PyMappingMethods = { $IFDEF CPUX86 } packed { $ENDIF}   record 
460461     mp_length	      : lenfunc;
461462     mp_subscript     : binaryfunc;
462463     mp_ass_subscript : objobjargproc;
463464  end ;
464465  PPyMappingMethods = ^PyMappingMethods;
465466
466-   Py_complex =  { $IFNDEF CPUX64 } packed { $ENDIF}   record 
467+   Py_complex =  { $IFDEF CPUX86 } packed { $ENDIF}   record 
467468     real : double;
468469     imag : double;
469470  end ;
470471
471-   PyObject = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
472+   PyObject = { $IFDEF CPUX86 } packed { $ENDIF}   record 
472473    ob_refcnt: NativeInt;
473474    ob_type:   PPyTypeObject;
474475  end ;
475476
476-   _frozen = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
477+   _frozen = { $IFDEF CPUX86 } packed { $ENDIF}   record 
477478     name 	: PAnsiChar;
478479     code	: PByte;
479480     size	: Integer;
480481  end ;
481482
482-   PySliceObject = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
483+   PySliceObject = { $IFDEF CPUX86 } packed { $ENDIF}   record 
483484    ob_refcnt:          NativeInt;
484485    ob_type:            PPyTypeObject;
485486    start, stop, step:  PPyObject;
486487  end ;
487488
488489  PPyMethodDef = ^PyMethodDef;
489-   PyMethodDef  = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
490+   PyMethodDef  = { $IFDEF CPUX86 } packed { $ENDIF}   record 
490491     ml_name:  PAnsiChar;
491492     ml_meth:  PyCFunction;
492493     ml_flags: Integer;
@@ -495,11 +496,11 @@   TPythonVersionProp = record
495496
496497  //  structmember.h
497498  PPyMemberDef = ^PyMemberDef;
498-   PyMemberDef = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
499+   PyMemberDef = { $IFDEF CPUX86 } packed { $ENDIF}   record 
499500    name  : PAnsiChar;
500501    _type : integer;
501502    offset : NativeInt;
502-     flags : integer ;
503+     flags : Integer ;
503504    doc : PAnsiChar;
504505  end ;
505506
@@ -511,7 +512,7 @@   TPythonVersionProp = record
511512  setter = function ( obj, value  : PPyObject; context : Pointer) : integer; cdecl;
512513
513514  PPyGetSetDef = ^PyGetSetDef;
514-   PyGetSetDef = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
515+   PyGetSetDef = { $IFDEF CPUX86 } packed { $ENDIF}   record 
515516    name  : PAnsiChar;
516517    get : getter;
517518    _set : setter;
@@ -522,7 +523,7 @@   TPythonVersionProp = record
522523  wrapperfunc = function (self, args: PPyObject; wrapped : Pointer) : PPyObject; cdecl;
523524
524525  pwrapperbase = ^wrapperbase;
525-   wrapperbase = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
526+   wrapperbase = { $IFDEF CPUX86 } packed { $ENDIF}   record 
526527    name  : PAnsiChar;
527528    wrapper : wrapperfunc;
528529    doc : PAnsiChar;
@@ -537,7 +538,7 @@   TPythonVersionProp = record
537538  }  
538539
539540  PPyDescrObject = ^PyDescrObject;
540-   PyDescrObject = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
541+   PyDescrObject = { $IFDEF CPUX86 } packed { $ENDIF}   record 
541542    //  Start of the Head of an object
542543    ob_refcnt  : NativeInt;
543544    ob_type    : PPyTypeObject;
@@ -547,7 +548,7 @@   TPythonVersionProp = record
547548  end ;
548549
549550  PPyMethodDescrObject = ^PyMethodDescrObject;
550-   PyMethodDescrObject = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
551+   PyMethodDescrObject = { $IFDEF CPUX86 } packed { $ENDIF}   record 
551552    //  Start of PyDescr_COMMON
552553    //  Start of the Head of an object
553554    ob_refcnt  : NativeInt;
@@ -560,7 +561,7 @@   TPythonVersionProp = record
560561  end ;
561562
562563  PPyMemberDescrObject = ^PyMemberDescrObject;
563-   PyMemberDescrObject = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
564+   PyMemberDescrObject = { $IFDEF CPUX86 } packed { $ENDIF}   record 
564565    //  Start of PyDescr_COMMON
565566    //  Start of the Head of an object
566567    ob_refcnt  : NativeInt;
@@ -573,7 +574,7 @@   TPythonVersionProp = record
573574  end ;
574575
575576  PPyGetSetDescrObject = ^PyGetSetDescrObject;
576-   PyGetSetDescrObject = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
577+   PyGetSetDescrObject = { $IFDEF CPUX86 } packed { $ENDIF}   record 
577578    //  Start of PyDescr_COMMON
578579    //  Start of the Head of an object
579580    ob_refcnt  : NativeInt;
@@ -586,7 +587,7 @@   TPythonVersionProp = record
586587  end ;
587588
588589  PPyWrapperDescrObject = ^PyWrapperDescrObject;
589-   PyWrapperDescrObject = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
590+   PyWrapperDescrObject = { $IFDEF CPUX86 } packed { $ENDIF}   record 
590591    //  Start of PyDescr_COMMON
591592    //  Start of the Head of an object
592593    ob_refcnt  : NativeInt;
@@ -600,7 +601,7 @@   TPythonVersionProp = record
600601  end ;
601602
602603  PPyModuleDef_Base = ^PyModuleDef_Base;
603-   PyModuleDef_Base = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
604+   PyModuleDef_Base = { $IFDEF CPUX86 } packed { $ENDIF}   record 
604605    //  Start of the Head of an object
605606    ob_refcnt  : NativeInt;
606607    ob_type    : PPyTypeObject;
@@ -611,7 +612,7 @@   TPythonVersionProp = record
611612  end ;
612613
613614  PPyModuleDef = ^PyModuleDef;
614-   PyModuleDef = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
615+   PyModuleDef = { $IFDEF CPUX86 } packed { $ENDIF}   record 
615616    m_base : PyModuleDef_Base;
616617    m_name : PAnsiChar;
617618    m_doc : PAnsiChar;
@@ -625,7 +626,7 @@   TPythonVersionProp = record
625626
626627
627628  //  object.h
628-   PyTypeObject = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
629+   PyTypeObject = { $IFDEF CPUX86 } packed { $ENDIF}   record 
629630    ob_refcnt:      NativeInt;
630631    ob_type:        PPyTypeObject;
631632    ob_size:        NativeInt; //  Number of items in variable part
@@ -724,7 +725,7 @@   TPythonVersionProp = record
724725  //  Parse tree node interface
725726
726727  PNode = ^node;
727-   node = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
728+   node = { $IFDEF CPUX86 } packed { $ENDIF}   record 
728729    n_type      : smallint;
729730    n_str       : PAnsiChar;
730731    n_lineno    : integer;
@@ -734,7 +735,7 @@   TPythonVersionProp = record
734735  end ;
735736
736737  PPyCompilerFlags = ^PyCompilerFlags;
737-   PyCompilerFlags = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
738+   PyCompilerFlags = { $IFDEF CPUX86 } packed { $ENDIF}   record 
738739    flags : integer;
739740    cf_feature_version : integer;  // added in Python 3.8
740741  end ;
@@ -765,11 +766,9 @@   TPythonVersionProp = record
765766
766767  {  # of bytes for year, month, day, hour, minute, second, and usecond. } 
767768  _PyDateTime_DATETIME_DATASIZE = 10 ;
768-   PyGILState_LOCKED = 0 ;
769-   PyGILState_UNLOCKED = 1 ;
770769
771770type 
772-   PyDateTime_Delta = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
771+   PyDateTime_Delta = { $IFDEF CPUX86 } packed { $ENDIF}   record 
773772    //  Start of the Head of an object
774773    ob_refcnt  : NativeInt;
775774    ob_type    : PPyTypeObject;
@@ -781,7 +780,7 @@   TPythonVersionProp = record
781780  end ;
782781  PPyDateTime_Delta = ^PyDateTime_Delta;
783782
784-   PyDateTime_TZInfo = { $IFNDEF CPUX64 } packed { $ENDIF}   record  //  a pure abstract base clase
783+   PyDateTime_TZInfo = { $IFDEF CPUX86 } packed { $ENDIF}   record  //  a pure abstract base clase
785784    //  Start of the Head of an object
786785    ob_refcnt  : NativeInt;
787786    ob_type    : PPyTypeObject;
@@ -803,7 +802,7 @@   TPythonVersionProp = record
803802 * convenient to cast to, when getting at the hastzinfo member of objects 
804803 * starting with _PyTZINFO_HEAD. 
805804 *}  
806-   _PyDateTime_BaseTZInfo = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
805+   _PyDateTime_BaseTZInfo = { $IFDEF CPUX86 } packed { $ENDIF}   record 
807806    //  Start of _PyTZINFO_HEAD
808807    //  Start of the Head of an object
809808    ob_refcnt  : NativeInt;
@@ -826,7 +825,7 @@   TPythonVersionProp = record
826825	unsigned char data[_PyDateTime_TIME_DATASIZE]; 
827826} 
828827
829-   _PyDateTime_BaseTime = { $IFNDEF CPUX64 } packed { $ENDIF}   record  //  hastzinfo false
828+   _PyDateTime_BaseTime = { $IFDEF CPUX86 } packed { $ENDIF}   record  //  hastzinfo false
830829    //  Start of _PyDateTime_TIMEHEAD
831830      //  Start of _PyTZINFO_HEAD
832831    //  Start of the Head of an object
@@ -841,7 +840,7 @@   TPythonVersionProp = record
841840  end ;
842841  _PPyDateTime_BaseTime = ^_PyDateTime_BaseTime;
843842
844-   PyDateTime_Time = { $IFNDEF CPUX64 } packed { $ENDIF}   record  //  hastzinfo true
843+   PyDateTime_Time = { $IFDEF CPUX86 } packed { $ENDIF}   record  //  hastzinfo true
845844    //  Start of _PyDateTime_TIMEHEAD
846845      //  Start of _PyTZINFO_HEAD
847846    //  Start of the Head of an object
@@ -864,7 +863,7 @@   TPythonVersionProp = record
864863 * the plain date type is a base class for datetime, so it must also have 
865864 * a hastzinfo member (although it's unused there). 
866865 *}  
867-   PyDateTime_Date = { $IFNDEF CPUX64 } packed { $ENDIF}   record 
866+   PyDateTime_Date = { $IFDEF CPUX86 } packed { $ENDIF}   record 
868867    //  Start of _PyTZINFO_HEAD
869868    //  Start of the Head of an object
870869    ob_refcnt  : NativeInt;
@@ -883,7 +882,7 @@   TPythonVersionProp = record
883882	unsigned char data[_PyDateTime_DATETIME_DATASIZE]; 
884883} 
885884
886-   _PyDateTime_BaseDateTime = { $IFNDEF CPUX64 } packed { $ENDIF}   record  //  hastzinfo false
885+   _PyDateTime_BaseDateTime = { $IFDEF CPUX86 } packed { $ENDIF}   record  //  hastzinfo false
887886    //  Start of _PyTZINFO_HEAD
888887    //  Start of the Head of an object
889888    ob_refcnt  : NativeInt;
@@ -896,7 +895,7 @@   TPythonVersionProp = record
896895  end ;
897896  _PPyDateTime_BaseDateTime = ^_PyDateTime_BaseDateTime;
898897
899-   PyDateTime_DateTime = { $IFNDEF CPUX64 } packed { $ENDIF}   record  //  hastzinfo true
898+   PyDateTime_DateTime = { $IFDEF CPUX86 } packed { $ENDIF}   record  //  hastzinfo true
900899    //  Start of _PyDateTime_DATETIMEHEAD
901900      //  Start of _PyTZINFO_HEAD
902901        //  Start of the Head of an object
@@ -917,6 +916,10 @@   TPythonVersionProp = record
917916// ##         GIL state                                 ##
918917// ##                                                   ##
919918// #######################################################
919+ const 
920+   PyGILState_LOCKED = 0 ;
921+   PyGILState_UNLOCKED = 1 ;
922+ type 
920923  PyGILState_STATE = type  Integer; //  (PyGILState_LOCKED, PyGILState_UNLOCKED);
921924
922925// #######################################################
@@ -1586,12 +1589,13 @@   TPythonInterface=class(TDynamicDll)
15861589    PyEval_EvalCode                 : function ( co : PPyObject; globals, locals : PPyObject) : PPyObject; cdecl;
15871590    Py_GetVersion                   : function : PAnsiChar; cdecl;
15881591    Py_GetCopyright                 : function : PAnsiChar; cdecl;
1589-     Py_GetExecPrefix                : function : PAnsiChar; cdecl;
1590-     Py_GetPath                      : function : PAnsiChar; cdecl;
1592+     Py_GetExecPrefix                : function : PWCharT; cdecl;
1593+     Py_GetPath                      : function : PWCharT; cdecl;
1594+     Py_SetPath                      : procedure (path: PWCharT); cdecl;
15911595    Py_SetPythonHome                : procedure (home : PWCharT); cdecl;
15921596    Py_GetPythonHome                : function : PWCharT; cdecl;
1593-     Py_GetPrefix                    : function : PAnsiChar ; cdecl;
1594-     Py_GetProgramName               : function : PAnsiChar ; cdecl;
1597+     Py_GetPrefix                    : function : PWCharT ; cdecl;
1598+     Py_GetProgramName               : function : PWCharT ; cdecl;
15951599
15961600    PyParser_SimpleParseStringFlags : function ( str : PAnsiChar; start, flags : Integer) : PNode; cdecl;
15971601    PyNode_Free                     : procedure( n : PNode ); cdecl;
@@ -2534,7 +2538,8 @@   TPythonType = class(TGetSetContainer)
25342538      //  methods
25352539      // /////////////////////////////////////
25362540      function   NewSubtypeInst ( aType: PPyTypeObject; args, kwds : PPyObject) : PPyObject; cdecl;
2537- 
2541+     public 
2542+       const  TYPE_COMP_NAME_SUFFIX = ' Type'  ;
25382543    public 
25392544      constructor  Create( AOwner : TComponent ); override;
25402545      destructor   Destroy; override;
@@ -3560,6 +3565,7 @@ procedure TPythonInterface.MapDll;
35603565  Py_GetCopyright             := Import (' Py_GetCopyright'  );
35613566  Py_GetExecPrefix            := Import (' Py_GetExecPrefix'  );
35623567  Py_GetPath                  := Import (' Py_GetPath'  );
3568+   Py_SetPath                  := Import (' Py_SetPath'  );
35633569  Py_SetPythonHome            := Import (' Py_SetPythonHome'  );
35643570  Py_GetPythonHome            := Import (' Py_GetPythonHome'  );
35653571  Py_GetPrefix                := Import (' Py_GetPrefix'  );
@@ -5043,7 +5049,7 @@ function TPythonEngine.EncodeWindowsFilePath(const str: string): AnsiString;
50435049    Result := AnsiString(str);
50445050end ;
50455051
5046- function     TPythonEngine.TypeByName ( const  aTypeName : AnsiString ) : PPyTypeObject;
5052+ function  TPythonEngine.TypeByName ( const  aTypeName : AnsiString ) : PPyTypeObject;
50475053var 
50485054  i : Integer;
50495055begin 
0 commit comments