diff --git a/Pythonnet.Runtime/runtime.cs b/Pythonnet.Runtime/runtime.cs
index 5e8c0a799e..3c516092dd 100644
--- a/Pythonnet.Runtime/runtime.cs
+++ b/Pythonnet.Runtime/runtime.cs
@@ -17,20 +17,20 @@ using Mono.Unix;
namespace Python.Runtime {
- [SuppressUnmanagedCodeSecurityAttribute()]
+ [SuppressUnmanagedCodeSecurityAttribute()]
- public class Runtime {
+ public class Runtime {
- ///
- /// Encapsulates the low-level Python C API. Note that it is
- /// the responsibility of the caller to have acquired the GIL
- /// before calling any of these methods.
- ///
+ ///
+ /// Encapsulates the low-level Python C API. Note that it is
+ /// the responsibility of the caller to have acquired the GIL
+ /// before calling any of these methods.
+ ///
#if (UCS4)
public const int UCS = 4;
#endif
#if (UCS2)
- public const int UCS = 2;
+ public const int UCS = 2;
#endif
#if ! (UCS2 || UCS4)
#error You must define either UCS2 or UCS4!
@@ -57,99 +57,99 @@ namespace Python.Runtime {
public const int pyversionnumber = 26;
#endif
#if (PYTHON27)
- public const string dll = "python27";
- public const string pyversion = "2.7";
- public const int pyversionnumber = 27;
+ public const string dll = "python27";
+ public const string pyversion = "2.7";
+ public const int pyversionnumber = 27;
#endif
#if ! (PYTHON23 || PYTHON24 || PYTHON25 || PYTHON26 || PYTHON27)
#error You must define one of PYTHON23 to PYTHON27
#endif
- public static bool wrap_exceptions;
- public static bool is32bit;
+ public static bool wrap_exceptions;
+ public static bool is32bit;
- ///
- /// Intitialize the runtime...
- ///
- public static void Initialize() {
+ ///
+ /// Intitialize the runtime...
+ ///
+ public static void Initialize() {
- is32bit = IntPtr.Size == 4;
+ is32bit = IntPtr.Size == 4;
- Runtime.Py_Initialize();
- Runtime.PyEval_InitThreads();
+ Runtime.Py_Initialize();
+ Runtime.PyEval_InitThreads();
- IntPtr dict = Runtime.PyImport_GetModuleDict();
- IntPtr op = Runtime.PyDict_GetItemString(dict, "__builtin__");
+ IntPtr dict = Runtime.PyImport_GetModuleDict();
+ IntPtr op = Runtime.PyDict_GetItemString(dict, "__builtin__");
- PyBaseObjectType = Runtime.PyObject_GetAttrString(op, "object");
+ PyBaseObjectType = Runtime.PyObject_GetAttrString(op, "object");
- PyModuleType = Runtime.PyObject_Type(op);
- PyNone = Runtime.PyObject_GetAttrString(op, "None");
- PyTrue = Runtime.PyObject_GetAttrString(op, "True");
- PyFalse = Runtime.PyObject_GetAttrString(op, "False");
+ PyModuleType = Runtime.PyObject_Type(op);
+ PyNone = Runtime.PyObject_GetAttrString(op, "None");
+ PyTrue = Runtime.PyObject_GetAttrString(op, "True");
+ PyFalse = Runtime.PyObject_GetAttrString(op, "False");
- PyBoolType = Runtime.PyObject_Type(PyTrue);> Python.Runtime.Runtime.Initialize() C#
+ PyBoolType = Runtime.PyObject_Type(PyTrue);
- PyNoneType = Runtime.PyObject_Type(PyNone);
- PyTypeType = Runtime.PyObject_Type(PyNoneType);
+ PyNoneType = Runtime.PyObject_Type(PyNone);
+ PyTypeType = Runtime.PyObject_Type(PyNoneType);
- op = Runtime.PyObject_GetAttrString(dict, "keys");
- PyMethodType = Runtime.PyObject_Type(op);
- Runtime.Decref(op);
+ op = Runtime.PyObject_GetAttrString(dict, "keys");
+ PyMethodType = Runtime.PyObject_Type(op);
+ Runtime.Decref(op);
- op = Runtime.PyString_FromString("string");
- PyStringType = Runtime.PyObject_Type(op);
- Runtime.Decref(op);
+ op = Runtime.PyString_FromString("string");
+ PyStringType = Runtime.PyObject_Type(op);
+ Runtime.Decref(op);
- op = Runtime.PyUnicode_FromString("unicode");
- PyUnicodeType = Runtime.PyObject_Type(op);
- Runtime.Decref(op);
+ op = Runtime.PyUnicode_FromString("unicode");
+ PyUnicodeType = Runtime.PyObject_Type(op);
+ Runtime.Decref(op);
- op = Runtime.PyTuple_New(0);
- PyTupleType = Runtime.PyObject_Type(op);
- Runtime.Decref(op);
+ op = Runtime.PyTuple_New(0);
+ PyTupleType = Runtime.PyObject_Type(op);
+ Runtime.Decref(op);
- op = Runtime.PyList_New(0);
- PyListType = Runtime.PyObject_Type(op);
- Runtime.Decref(op);
+ op = Runtime.PyList_New(0);
+ PyListType = Runtime.PyObject_Type(op);
+ Runtime.Decref(op);
- op = Runtime.PyDict_New();
- PyDictType = Runtime.PyObject_Type(op);
- Runtime.Decref(op);
+ op = Runtime.PyDict_New();
+ PyDictType = Runtime.PyObject_Type(op);
+ Runtime.Decref(op);
- op = Runtime.PyInt_FromInt32(0);
- PyIntType = Runtime.PyObject_Type(op);
- Runtime.Decref(op);
+ op = Runtime.PyInt_FromInt32(0);
+ PyIntType = Runtime.PyObject_Type(op);
+ Runtime.Decref(op);
- op = Runtime.PyLong_FromLong(0);
- PyLongType = Runtime.PyObject_Type(op);
- Runtime.Decref(op);
+ op = Runtime.PyLong_FromLong(0);
+ PyLongType = Runtime.PyObject_Type(op);
+ Runtime.Decref(op);
- op = Runtime.PyFloat_FromDouble(0);
- PyFloatType = Runtime.PyObject_Type(op);
- Runtime.Decref(op);
+ op = Runtime.PyFloat_FromDouble(0);
+ PyFloatType = Runtime.PyObject_Type(op);
+ Runtime.Decref(op);
- IntPtr s = Runtime.PyString_FromString("_temp");
- IntPtr d = Runtime.PyDict_New();
- IntPtr c = Runtime.PyClass_New(IntPtr.Zero, d, s);
- PyClassType = Runtime.PyObject_Type(c);
+ IntPtr s = Runtime.PyString_FromString("_temp");
+ IntPtr d = Runtime.PyDict_New();
+ IntPtr c = Runtime.PyClass_New(IntPtr.Zero, d, s);
+ PyClassType = Runtime.PyObject_Type(c);
- IntPtr i = Runtime.PyInstance_New(c, IntPtr.Zero, IntPtr.Zero);
- PyInstanceType = Runtime.PyObject_Type(i);
+ IntPtr i = Runtime.PyInstance_New(c, IntPtr.Zero, IntPtr.Zero);
+ PyInstanceType = Runtime.PyObject_Type(i);
- Runtime.Decref(s);
- Runtime.Decref(i);
- Runtime.Decref(c);
- Runtime.Decref(d);
+ Runtime.Decref(s);
+ Runtime.Decref(i);
+ Runtime.Decref(c);
+ Runtime.Decref(d);
- Error = new IntPtr(-1);
+ Error = new IntPtr(-1);
- // Determine whether we need to wrap exceptions for versions of
- // of the Python runtime that do not allow new-style classes to
- // be used as exceptions (Python versions 2.4 and lower).
+ // Determine whether we need to wrap exceptions for versions of
+ // of the Python runtime that do not allow new-style classes to
+ // be used as exceptions (Python versions 2.4 and lower).
#if (PYTHON25 || PYTHON26 || PYTHON27)
- wrap_exceptions = false;
+ wrap_exceptions = false;
#else
IntPtr m = PyImport_ImportModule("exceptions");
Exceptions.ErrorCheck(m);
@@ -162,202 +162,202 @@ namespace Python.Runtime {
Runtime.Decref(m);
#endif
- // Initialize modules that depend on the runtime class.
- AssemblyManager.Initialize();
- PyCLRMetaType = MetaType.Initialize();
- Exceptions.Initialize();
- ImportHook.Initialize();
+ // Initialize modules that depend on the runtime class.
+ AssemblyManager.Initialize();
+ PyCLRMetaType = MetaType.Initialize();
+ Exceptions.Initialize();
+ ImportHook.Initialize();
- // Need to add the runtime directory to sys.path so that we
- // can find built-in assemblies like System.Data, et. al.
- string rtdir = RuntimeEnvironment.GetRuntimeDirectory();
- IntPtr path = Runtime.PySys_GetObject("path");
- IntPtr item = Runtime.PyString_FromString(rtdir);
- Runtime.PyList_Append(path, item);
- Runtime.Decref(item);
- AssemblyManager.UpdatePath();
- }
+ // Need to add the runtime directory to sys.path so that we
+ // can find built-in assemblies like System.Data, et. al.
+ string rtdir = RuntimeEnvironment.GetRuntimeDirectory();
+ IntPtr path = Runtime.PySys_GetObject("path");
+ IntPtr item = Runtime.PyString_FromString(rtdir);
+ Runtime.PyList_Append(path, item);
+ Runtime.Decref(item);
+ AssemblyManager.UpdatePath();
+ }
- public static void Shutdown() {
- AssemblyManager.Shutdown();
- Exceptions.Shutdown();
- ImportHook.Shutdown();
- Py_Finalize();
- }
+ public static void Shutdown() {
+ AssemblyManager.Shutdown();
+ Exceptions.Shutdown();
+ ImportHook.Shutdown();
+ Py_Finalize();
+ }
- public static IntPtr Py_single_input = (IntPtr)256;
- public static IntPtr Py_file_input = (IntPtr)257;
- public static IntPtr Py_eval_input = (IntPtr)258;
+ public static IntPtr Py_single_input = (IntPtr)256;
+ public static IntPtr Py_file_input = (IntPtr)257;
+ public static IntPtr Py_eval_input = (IntPtr)258;
- public static IntPtr PyBaseObjectType;
- public static IntPtr PyModuleType;
- public static IntPtr PyClassType;
- public static IntPtr PyInstanceType;
- public static IntPtr PyCLRMetaType;
- public static IntPtr PyMethodType;
+ public static IntPtr PyBaseObjectType;
+ public static IntPtr PyModuleType;
+ public static IntPtr PyClassType;
+ public static IntPtr PyInstanceType;
+ public static IntPtr PyCLRMetaType;
+ public static IntPtr PyMethodType;
- public static IntPtr PyUnicodeType;
- public static IntPtr PyStringType;
- public static IntPtr PyTupleType;
- public static IntPtr PyListType;
- public static IntPtr PyDictType;
- public static IntPtr PyIntType;
- public static IntPtr PyLongType;
- public static IntPtr PyFloatType;
- public static IntPtr PyBoolType;
- public static IntPtr PyNoneType;
- public static IntPtr PyTypeType;
+ public static IntPtr PyUnicodeType;
+ public static IntPtr PyStringType;
+ public static IntPtr PyTupleType;
+ public static IntPtr PyListType;
+ public static IntPtr PyDictType;
+ public static IntPtr PyIntType;
+ public static IntPtr PyLongType;
+ public static IntPtr PyFloatType;
+ public static IntPtr PyBoolType;
+ public static IntPtr PyNoneType;
+ public static IntPtr PyTypeType;
- public static IntPtr PyTrue;
- public static IntPtr PyFalse;
- public static IntPtr PyNone;
- public static IntPtr Error;
+ public static IntPtr PyTrue;
+ public static IntPtr PyFalse;
+ public static IntPtr PyNone;
+ public static IntPtr Error;
- public static IntPtr GetBoundArgTuple(IntPtr obj, IntPtr args) {
- if (Runtime.PyObject_TYPE(args) != Runtime.PyTupleType) {
- Exceptions.SetError(Exceptions.TypeError, "tuple expected");
- return IntPtr.Zero;
- }
- int size = Runtime.PyTuple_Size(args);
- IntPtr items = Runtime.PyTuple_New(size + 1);
- Runtime.PyTuple_SetItem(items, 0, obj);
- Runtime.Incref(obj);
+ public static IntPtr GetBoundArgTuple(IntPtr obj, IntPtr args) {
+ if (Runtime.PyObject_TYPE(args) != Runtime.PyTupleType) {
+ Exceptions.SetError(Exceptions.TypeError, "tuple expected");
+ return IntPtr.Zero;
+ }
+ int size = Runtime.PyTuple_Size(args);
+ IntPtr items = Runtime.PyTuple_New(size + 1);
+ Runtime.PyTuple_SetItem(items, 0, obj);
+ Runtime.Incref(obj);
- for (int i = 0; i < size; i++) {
- IntPtr item = Runtime.PyTuple_GetItem(args, i);
- Runtime.Incref(item);
- Runtime.PyTuple_SetItem(items, i + 1, item);
- }
+ for (int i = 0; i < size; i++) {
+ IntPtr item = Runtime.PyTuple_GetItem(args, i);
+ Runtime.Incref(item);
+ Runtime.PyTuple_SetItem(items, i + 1, item);
+ }
- return items;
- }
+ return items;
+ }
- public static IntPtr ExtendTuple(IntPtr t, params IntPtr[] args) {
- int size = Runtime.PyTuple_Size(t);
- int add = args.Length;
- IntPtr item;
+ public static IntPtr ExtendTuple(IntPtr t, params IntPtr[] args) {
+ int size = Runtime.PyTuple_Size(t);
+ int add = args.Length;
+ IntPtr item;
- IntPtr items = Runtime.PyTuple_New(size + add);
- for (int i = 0; i < size; i++) {
- item = Runtime.PyTuple_GetItem(t, i);
- Runtime.Incref(item);
- Runtime.PyTuple_SetItem(items, i, item);
- }
+ IntPtr items = Runtime.PyTuple_New(size + add);
+ for (int i = 0; i < size; i++) {
+ item = Runtime.PyTuple_GetItem(t, i);
+ Runtime.Incref(item);
+ Runtime.PyTuple_SetItem(items, i, item);
+ }
- for (int n = 0; n < add; n++) {
- item = args[n];
- Runtime.Incref(item);
- Runtime.PyTuple_SetItem(items, size + n, item);
- }
+ for (int n = 0; n < add; n++) {
+ item = args[n];
+ Runtime.Incref(item);
+ Runtime.PyTuple_SetItem(items, size + n, item);
+ }
- return items;
- }
+ return items;
+ }
- public static Type[] PythonArgsToTypeArray(IntPtr arg) {
- return PythonArgsToTypeArray(arg, false);
- }
+ public static Type[] PythonArgsToTypeArray(IntPtr arg) {
+ return PythonArgsToTypeArray(arg, false);
+ }
- public static Type[] PythonArgsToTypeArray(IntPtr arg, bool mangleObjects) {
- // Given a PyObject * that is either a single type object or a
- // tuple of (managed or unmanaged) type objects, return a Type[]
- // containing the CLR Type objects that map to those types.
- IntPtr args = arg;
- bool free = false;
+ public static Type[] PythonArgsToTypeArray(IntPtr arg, bool mangleObjects) {
+ // Given a PyObject * that is either a single type object or a
+ // tuple of (managed or unmanaged) type objects, return a Type[]
+ // containing the CLR Type objects that map to those types.
+ IntPtr args = arg;
+ bool free = false;
- if (!Runtime.PyTuple_Check(arg)) {
- args = Runtime.PyTuple_New(1);
- Runtime.Incref(arg);
- Runtime.PyTuple_SetItem(args, 0, arg);
- free = true;
- }
+ if (!Runtime.PyTuple_Check(arg)) {
+ args = Runtime.PyTuple_New(1);
+ Runtime.Incref(arg);
+ Runtime.PyTuple_SetItem(args, 0, arg);
+ free = true;
+ }
- int n = Runtime.PyTuple_Size(args);
- Type[] types = new Type[n];
- Type t = null;
+ int n = Runtime.PyTuple_Size(args);
+ Type[] types = new Type[n];
+ Type t = null;
- for (int i = 0; i < n; i++) {
- IntPtr op = Runtime.PyTuple_GetItem(args, i);
- if (mangleObjects && (!Runtime.PyType_Check(op))) {
- op = Runtime.PyObject_TYPE(op);
- }
- ManagedType mt = ManagedType.GetManagedObject(op);
+ for (int i = 0; i < n; i++) {
+ IntPtr op = Runtime.PyTuple_GetItem(args, i);
+ if (mangleObjects && (!Runtime.PyType_Check(op))) {
+ op = Runtime.PyObject_TYPE(op);
+ }
+ ManagedType mt = ManagedType.GetManagedObject(op);
- if (mt is ClassBase) {
- t = ((ClassBase)mt).type;
- }
- else if (mt is CLRObject) {
- object inst = ((CLRObject)mt).inst;
- if (inst is Type) {
- t = inst as Type;
- }
- }
- else {
- t = Converter.GetTypeByAlias(op);
- }
+ if (mt is ClassBase) {
+ t = ((ClassBase)mt).type;
+ }
+ else if (mt is CLRObject) {
+ object inst = ((CLRObject)mt).inst;
+ if (inst is Type) {
+ t = inst as Type;
+ }
+ }
+ else {
+ t = Converter.GetTypeByAlias(op);
+ }
- if (t == null) {
- types = null;
- break;
- }
- types[i] = t;
- }
- if (free) {
- Runtime.Decref(args);
- }
- return types;
- }
+ if (t == null) {
+ types = null;
+ break;
+ }
+ types[i] = t;
+ }
+ if (free) {
+ Runtime.Decref(args);
+ }
+ return types;
+ }
- //===================================================================
- // Managed exports of the Python C API. Where appropriate, we do
- // some optimization to avoid managed <--> unmanaged transitions
- // (mostly for heavily used methods).
- //===================================================================
+ //===================================================================
+ // Managed exports of the Python C API. Where appropriate, we do
+ // some optimization to avoid managed <--> unmanaged transitions
+ // (mostly for heavily used methods).
+ //===================================================================
- public unsafe static void Incref(IntPtr op) {
+ public unsafe static void Incref(IntPtr op) {
#if (Py_DEBUG)
Py_IncRef(op);
return;
#else
- void *p = (void *)op;
- if ((void *)0 != p) {
- if (is32bit) { (*(int *)p)++; }
- else { (*(long *)p)++; }
- }
+ void* p = (void*)op;
+ if ((void*)0 != p) {
+ if (is32bit) { (*(int*)p)++; }
+ else { (*(long*)p)++; }
+ }
#endif
- }
+ }
- public unsafe static void Decref(IntPtr op) {
- if (op == IntPtr.Zero) {
- DebugUtil.Print("Decref(NULL)");
- }
+ public unsafe static void Decref(IntPtr op) {
+ if (op == IntPtr.Zero) {
+ DebugUtil.Print("Decref(NULL)");
+ }
#if (Py_DEBUG)
// Py_DecRef calls Python's Py_DECREF
Py_DecRef(op);
return;
#else
- void* p = (void*) op;
- if ((void*) 0 != p) {
- if (is32bit) { --(*(int*) p); }
- else { --(*(long*) p); }
- if ((*(int*) p) == 0) {
- // PyObject_HEAD: struct _typeobject *ob_type
- void* t = is32bit ? (void*) (*((uint*) p + 1)) :
- (void*) (*((ulong*) p + 1));
- // PyTypeObject: destructor tp_dealloc
- void* f = is32bit ? (void*) (*((uint*) t + 6)) :
- (void*) (*((ulong*) t + 6));
- if ((void*) 0 == f) {
- return;
- }
- NativeCall.Impl.Void_Call_1(new IntPtr(f), op);
- return;
- }
- }
+ void* p = (void*)op;
+ if ((void*)0 != p) {
+ if (is32bit) { --(*(int*)p); }
+ else { --(*(long*)p); }
+ if ((*(int*)p) == 0) {
+ // PyObject_HEAD: struct _typeobject *ob_type
+ void* t = is32bit ? (void*)(*((uint*)p + 1)) :
+ (void*)(*((ulong*)p + 1));
+ // PyTypeObject: destructor tp_dealloc
+ void* f = is32bit ? (void*)(*((uint*)t + 6)) :
+ (void*)(*((ulong*)t + 6));
+ if ((void*)0 == f) {
+ return;
+ }
+ NativeCall.Impl.Void_Call_1(new IntPtr(f), op);
+ return;
+ }
+ }
#endif
- }
+ }
#if (Py_DEBUG)
// Py_IncRef and Py_DecRef are taking care of the extra payload
@@ -373,730 +373,726 @@ namespace Python.Runtime {
Py_DecRef(IntPtr ob);
#endif
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- Py_Initialize();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ Py_Initialize();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- Py_IsInitialized();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ Py_IsInitialized();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- Py_Finalize();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ Py_Finalize();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- Py_NewInterpreter();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ Py_NewInterpreter();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- Py_EndInterpreter(IntPtr threadState);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ Py_EndInterpreter(IntPtr threadState);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyThreadState_New(IntPtr istate);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyThreadState_New(IntPtr istate);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyThreadState_Get();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyThreadState_Get();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyThread_get_key_value(IntPtr key);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyThread_get_key_value(IntPtr key);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyThread_get_thread_ident();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyThread_get_thread_ident();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyThread_set_key_value(IntPtr key, IntPtr value);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyThread_set_key_value(IntPtr key, IntPtr value);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyThreadState_Swap(IntPtr key);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyThreadState_Swap(IntPtr key);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyGILState_Ensure();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyGILState_Ensure();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyGILState_Release(IntPtr gs);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyGILState_Release(IntPtr gs);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyGILState_GetThisThreadState();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyGILState_GetThisThreadState();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- Py_Main(int argc, string[] argv);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ Py_Main(int argc, string[] argv);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyEval_InitThreads();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyEval_InitThreads();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyEval_AcquireLock();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyEval_AcquireLock();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyEval_ReleaseLock();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyEval_ReleaseLock();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyEval_AcquireThread(IntPtr tstate);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyEval_AcquireThread(IntPtr tstate);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyEval_ReleaseThread(IntPtr tstate);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyEval_ReleaseThread(IntPtr tstate);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyEval_SaveThread();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyEval_SaveThread();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyEval_RestoreThread(IntPtr tstate);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyEval_RestoreThread(IntPtr tstate);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyEval_GetBuiltins();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyEval_GetBuiltins();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyEval_GetGlobals();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyEval_GetGlobals();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyEval_GetLocals();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyEval_GetLocals();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern string
- Py_GetProgramName();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern string
+ Py_GetProgramName();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- Py_SetProgramName(string name);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ Py_SetProgramName(string name);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern string
- Py_GetPythonHome();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern string
+ Py_GetPythonHome();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- Py_SetPythonHome(string home);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ Py_SetPythonHome(string home);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern string
- Py_GetVersion();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern string
+ Py_GetVersion();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern string
- Py_GetPlatform();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern string
+ Py_GetPlatform();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern string
- Py_GetCopyright();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern string
+ Py_GetCopyright();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern string
- Py_GetCompiler();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern string
+ Py_GetCompiler();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern string
- Py_GetBuildInfo();
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern string
+ Py_GetBuildInfo();
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyRun_SimpleString(string code);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyRun_SimpleString(string code);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyRun_String(string code, IntPtr st, IntPtr globals, IntPtr locals);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyRun_String(string code, IntPtr st, IntPtr globals, IntPtr locals);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- Py_CompileString(string code, string file, IntPtr tok);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ Py_CompileString(string code, string file, IntPtr tok);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyImport_ExecCodeModule(string name, IntPtr code);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyImport_ExecCodeModule(string name, IntPtr code);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyCFunction_New(IntPtr ml, IntPtr self);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyCFunction_New(IntPtr ml, IntPtr self);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyCFunction_NewEx(IntPtr ml, IntPtr self, IntPtr mod);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyCFunction_NewEx(IntPtr ml, IntPtr self, IntPtr mod);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyCFunction_Call(IntPtr func, IntPtr args, IntPtr kw);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyCFunction_Call(IntPtr func, IntPtr args, IntPtr kw);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyClass_New(IntPtr bases, IntPtr dict, IntPtr name);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyClass_New(IntPtr bases, IntPtr dict, IntPtr name);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyInstance_New(IntPtr cls, IntPtr args, IntPtr kw);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyInstance_New(IntPtr cls, IntPtr args, IntPtr kw);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyInstance_NewRaw(IntPtr cls, IntPtr dict);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyInstance_NewRaw(IntPtr cls, IntPtr dict);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyMethod_New(IntPtr func, IntPtr self, IntPtr cls);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyMethod_New(IntPtr func, IntPtr self, IntPtr cls);
- //====================================================================
- // Python abstract object API
- //====================================================================
+ //====================================================================
+ // Python abstract object API
+ //====================================================================
- // A macro-like method to get the type of a Python object. This is
- // designed to be lean and mean in IL & avoid managed <-> unmanaged
- // transitions. Note that this does not incref the type object.
+ // A macro-like method to get the type of a Python object. This is
+ // designed to be lean and mean in IL & avoid managed <-> unmanaged
+ // transitions. Note that this does not incref the type object.
- public unsafe static IntPtr
- PyObject_TYPE(IntPtr op) {
- void* p = (void*)op;
- if ((void*)0 == p) {
- return IntPtr.Zero;
- }
+ public unsafe static IntPtr
+ PyObject_TYPE(IntPtr op) {
+ void* p = (void*)op;
+ if ((void*)0 == p) {
+ return IntPtr.Zero;
+ }
#if (Py_DEBUG)
int n = 3;
#else
- int n = 1;
+ int n = 1;
#endif
- if (is32bit) {
- return new IntPtr((void*)(*((uint*)p + n)));
- }
- else {
- return new IntPtr((void*)(*((ulong*)p + n)));
- }
- }
-
- // Managed version of the standard Python C API PyObject_Type call.
- // This version avoids a managed <-> unmanaged transition. This one
- // does incref the returned type object.
-
- [CLSCompliant(false)]
- public unsafe static IntPtr
- PyObject_Type(IntPtr op) {
- IntPtr tp = PyObject_TYPE(op);
- Runtime.Incref(tp);
- return tp;
- }
-
- public static string PyObject_GetTypeName(IntPtr op) {
- IntPtr pyType = Marshal.ReadIntPtr(op, ObjectOffset.ob_type);
- IntPtr ppName = Marshal.ReadIntPtr(pyType, TypeOffset.tp_name);
- return Marshal.PtrToStringAnsi(ppName);
- }
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_HasAttrString(IntPtr pointer, string name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_GetAttrString(IntPtr pointer, string name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_SetAttrString(IntPtr pointer, string name, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_HasAttr(IntPtr pointer, IntPtr name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_GetAttr(IntPtr pointer, IntPtr name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_SetAttr(IntPtr pointer, IntPtr name, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_GetItem(IntPtr pointer, IntPtr key);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_SetItem(IntPtr pointer, IntPtr key, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_DelItem(IntPtr pointer, IntPtr key);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_GetIter(IntPtr op);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_Call(IntPtr pointer, IntPtr args, IntPtr kw);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_CallObject(IntPtr pointer, IntPtr args);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_Compare(IntPtr value1, IntPtr value2);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_IsInstance(IntPtr ob, IntPtr type);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_IsSubclass(IntPtr ob, IntPtr type);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyCallable_Check(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_IsTrue(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_Size(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_Hash(IntPtr op);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_Repr(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_Str(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
- ExactSpelling = true, CharSet = CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_Unicode(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_Dir(IntPtr pointer);
-
-
- //====================================================================
- // Python number API
- //====================================================================
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyNumber_Int(IntPtr ob);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyNumber_Long(IntPtr ob);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyNumber_Float(IntPtr ob);
-
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern bool
- PyNumber_Check(IntPtr ob);
-
-
- public static bool PyInt_Check(IntPtr ob) {
- return PyObject_TypeCheck(ob, Runtime.PyIntType);
- }
-
- public static bool PyBool_Check(IntPtr ob) {
- return PyObject_TypeCheck(ob, Runtime.PyBoolType);
- }
-
-
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- private unsafe static extern IntPtr
- PyInt_FromLong(IntPtr value);
-
- public static IntPtr PyInt_FromInt32(int value) {
- IntPtr v = new IntPtr(value);
- return PyInt_FromLong(v);
- }
-
- public static IntPtr PyInt_FromInt64(long value) {
- IntPtr v = new IntPtr(value);
- return PyInt_FromLong(v);
- }
-
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyInt_AsLong(IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyInt_FromString(string value, IntPtr end, int radix);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyInt_GetMax();
-
-
- public static bool PyLong_Check(IntPtr ob) {
- return PyObject_TYPE(ob) == Runtime.PyLongType;
- }
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyLong_FromLong(long value);
-
- [CLSCompliant(false)]
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyLong_FromUnsignedLong(uint value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyLong_FromDouble(double value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyLong_FromLongLong(long value);
-
- [CLSCompliant(false)]
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyLong_FromUnsignedLongLong(ulong value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyLong_FromString(string value, IntPtr end, int radix);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyLong_AsLong(IntPtr value);
-
- [CLSCompliant(false)]
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern uint
- PyLong_AsUnsignedLong(IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern long
- PyLong_AsLongLong(IntPtr value);
-
- [CLSCompliant(false)]
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern ulong
- PyLong_AsUnsignedLongLong(IntPtr value);
-
-
- public static bool PyFloat_Check(IntPtr ob) {
- return PyObject_TYPE(ob) == Runtime.PyFloatType;
- }
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyFloat_FromDouble(double value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyFloat_FromString(IntPtr value, IntPtr junk);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern double
- PyFloat_AsDouble(IntPtr ob);
-
-
- //====================================================================
- // Python sequence API
- //====================================================================
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern bool
- PySequence_Check(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PySequence_GetItem(IntPtr pointer, int index);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PySequence_SetItem(IntPtr pointer, int index, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PySequence_DelItem(IntPtr pointer, int index);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PySequence_GetSlice(IntPtr pointer, int i1, int i2);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PySequence_SetSlice(IntPtr pointer, int i1, int i2, IntPtr v);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PySequence_DelSlice(IntPtr pointer, int i1, int i2);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PySequence_Size(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PySequence_Contains(IntPtr pointer, IntPtr item);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PySequence_Concat(IntPtr pointer, IntPtr other);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PySequence_Repeat(IntPtr pointer, int count);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PySequence_Index(IntPtr pointer, IntPtr item);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PySequence_Count(IntPtr pointer, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PySequence_Tuple(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PySequence_List(IntPtr pointer);
-
-
- //====================================================================
- // Python string API
- //====================================================================
-
- public static bool IsStringType(IntPtr op) {
- IntPtr t = PyObject_TYPE(op);
- return (t == PyStringType) || (t == PyUnicodeType);
- }
-
- public static bool PyString_Check(IntPtr ob) {
- return PyObject_TYPE(ob) == Runtime.PyStringType;
- }
-
- public static IntPtr PyString_FromString(string value) {
- return PyString_FromStringAndSize(value, value.Length);
- }
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyString_FromStringAndSize(string value, int size);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- EntryPoint="PyString_AsString",
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyString_AS_STRING(IntPtr op);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyString_Size(IntPtr pointer);
-
- public static bool PyUnicode_Check(IntPtr ob) {
- return PyObject_TYPE(ob) == Runtime.PyUnicodeType;
- }
+ if (is32bit) {
+ return new IntPtr((void*)(*((uint*)p + n)));
+ }
+ else {
+ return new IntPtr((void*)(*((ulong*)p + n)));
+ }
+ }
+
+ // Managed version of the standard Python C API PyObject_Type call.
+ // This version avoids a managed <-> unmanaged transition. This one
+ // does incref the returned type object.
+
+ [CLSCompliant(false)]
+ public unsafe static IntPtr
+ PyObject_Type(IntPtr op) {
+ IntPtr tp = PyObject_TYPE(op);
+ Runtime.Incref(tp);
+ return tp;
+ }
+
+ public static string PyObject_GetTypeName(IntPtr op) {
+ IntPtr pyType = Marshal.ReadIntPtr(op, ObjectOffset.ob_type);
+ IntPtr ppName = Marshal.ReadIntPtr(pyType, TypeOffset.tp_name);
+ return Marshal.PtrToStringAnsi(ppName);
+ }
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_HasAttrString(IntPtr pointer, string name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_GetAttrString(IntPtr pointer, string name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_SetAttrString(IntPtr pointer, string name, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_HasAttr(IntPtr pointer, IntPtr name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_GetAttr(IntPtr pointer, IntPtr name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_SetAttr(IntPtr pointer, IntPtr name, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_GetItem(IntPtr pointer, IntPtr key);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_SetItem(IntPtr pointer, IntPtr key, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_DelItem(IntPtr pointer, IntPtr key);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_GetIter(IntPtr op);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_Call(IntPtr pointer, IntPtr args, IntPtr kw);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_CallObject(IntPtr pointer, IntPtr args);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_Compare(IntPtr value1, IntPtr value2);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_IsInstance(IntPtr ob, IntPtr type);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_IsSubclass(IntPtr ob, IntPtr type);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyCallable_Check(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_IsTrue(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_Size(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_Hash(IntPtr op);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_Repr(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_Str(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_Unicode(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_Dir(IntPtr pointer);
+
+
+ //====================================================================
+ // Python number API
+ //====================================================================
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyNumber_Int(IntPtr ob);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyNumber_Long(IntPtr ob);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyNumber_Float(IntPtr ob);
+
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern bool
+ PyNumber_Check(IntPtr ob);
+
+
+ public static bool PyInt_Check(IntPtr ob) {
+ return PyObject_TypeCheck(ob, Runtime.PyIntType);
+ }
+
+ public static bool PyBool_Check(IntPtr ob) {
+ return PyObject_TypeCheck(ob, Runtime.PyBoolType);
+ }
+
+
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ private unsafe static extern IntPtr
+ PyInt_FromLong(IntPtr value);
+
+ public static IntPtr PyInt_FromInt32(int value) {
+ IntPtr v = new IntPtr(value);
+ return PyInt_FromLong(v);
+ }
+
+ public static IntPtr PyInt_FromInt64(long value) {
+ IntPtr v = new IntPtr(value);
+ return PyInt_FromLong(v);
+ }
+
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyInt_AsLong(IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyInt_FromString(string value, IntPtr end, int radix);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyInt_GetMax();
+
+
+ public static bool PyLong_Check(IntPtr ob) {
+ return PyObject_TYPE(ob) == Runtime.PyLongType;
+ }
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyLong_FromLong(long value);
+
+ [CLSCompliant(false)]
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyLong_FromUnsignedLong(uint value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyLong_FromDouble(double value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyLong_FromLongLong(long value);
+
+ [CLSCompliant(false)]
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyLong_FromUnsignedLongLong(ulong value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyLong_FromString(string value, IntPtr end, int radix);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyLong_AsLong(IntPtr value);
+
+ [CLSCompliant(false)]
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern uint
+ PyLong_AsUnsignedLong(IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern long
+ PyLong_AsLongLong(IntPtr value);
+
+ [CLSCompliant(false)]
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern ulong
+ PyLong_AsUnsignedLongLong(IntPtr value);
+
+
+ public static bool PyFloat_Check(IntPtr ob) {
+ return PyObject_TYPE(ob) == Runtime.PyFloatType;
+ }
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyFloat_FromDouble(double value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyFloat_FromString(IntPtr value, IntPtr junk);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern double
+ PyFloat_AsDouble(IntPtr ob);
+
+
+ //====================================================================
+ // Python sequence API
+ //====================================================================
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern bool
+ PySequence_Check(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PySequence_GetItem(IntPtr pointer, int index);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PySequence_SetItem(IntPtr pointer, int index, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PySequence_DelItem(IntPtr pointer, int index);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PySequence_GetSlice(IntPtr pointer, int i1, int i2);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PySequence_SetSlice(IntPtr pointer, int i1, int i2, IntPtr v);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PySequence_DelSlice(IntPtr pointer, int i1, int i2);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PySequence_Size(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PySequence_Contains(IntPtr pointer, IntPtr item);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PySequence_Concat(IntPtr pointer, IntPtr other);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PySequence_Repeat(IntPtr pointer, int count);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PySequence_Index(IntPtr pointer, IntPtr item);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PySequence_Count(IntPtr pointer, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PySequence_Tuple(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PySequence_List(IntPtr pointer);
+
+
+ //====================================================================
+ // Python string API
+ //====================================================================
+
+ public static bool IsStringType(IntPtr op) {
+ IntPtr t = PyObject_TYPE(op);
+ return (t == PyStringType) || (t == PyUnicodeType);
+ }
+
+ public static bool PyString_Check(IntPtr ob) {
+ return PyObject_TYPE(ob) == Runtime.PyStringType;
+ }
+
+ public static IntPtr PyString_FromString(string value) {
+ return PyString_FromStringAndSize(value, value.Length);
+ }
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyString_FromStringAndSize(string value, int size);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ EntryPoint = "PyString_AsString",
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyString_AS_STRING(IntPtr op);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyString_Size(IntPtr pointer);
+
+ public static bool PyUnicode_Check(IntPtr ob) {
+ return PyObject_TYPE(ob) == Runtime.PyUnicodeType;
+ }
#if (UCS2)
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- EntryPoint="PyUnicodeUCS2_FromObject",
- ExactSpelling=true, CharSet=CharSet.Unicode)]
- public unsafe static extern IntPtr
- PyUnicode_FromObject(IntPtr ob);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ EntryPoint = "PyUnicodeUCS2_FromObject",
+ ExactSpelling = true, CharSet = CharSet.Unicode)]
+ public unsafe static extern IntPtr
+ PyUnicode_FromObject(IntPtr ob);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- EntryPoint="PyUnicodeUCS2_FromEncodedObject",
- ExactSpelling=true, CharSet=CharSet.Unicode)]
- public unsafe static extern IntPtr
- PyUnicode_FromEncodedObject(IntPtr ob, IntPtr enc, IntPtr err);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ EntryPoint = "PyUnicodeUCS2_FromEncodedObject",
+ ExactSpelling = true, CharSet = CharSet.Unicode)]
+ public unsafe static extern IntPtr
+ PyUnicode_FromEncodedObject(IntPtr ob, IntPtr enc, IntPtr err);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- EntryPoint="PyUnicodeUCS2_FromUnicode",
- ExactSpelling=true, CharSet=CharSet.Unicode)]
- public unsafe static extern IntPtr
- PyUnicode_FromUnicode(string s, int size);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ EntryPoint = "PyUnicodeUCS2_FromUnicode",
+ ExactSpelling = true, CharSet = CharSet.Unicode)]
+ public unsafe static extern IntPtr
+ PyUnicode_FromUnicode(string s, int size);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- EntryPoint="PyUnicodeUCS2_GetSize",
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyUnicode_GetSize(IntPtr ob);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ EntryPoint = "PyUnicodeUCS2_GetSize",
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyUnicode_GetSize(IntPtr ob);
- [CLSCompliant(false)]
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- EntryPoint="PyUnicodeUCS2_AsUnicode",
- ExactSpelling=true)]
- public unsafe static extern char *
- PyUnicode_AsUnicode(IntPtr ob);
+ [CLSCompliant(false)]
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ EntryPoint = "PyUnicodeUCS2_AsUnicode",
+ ExactSpelling = true)]
+ public unsafe static extern char*
+ PyUnicode_AsUnicode(IntPtr ob);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- EntryPoint="PyUnicodeUCS2_AsUnicode",
- ExactSpelling=true, CharSet=CharSet.Unicode)]
- public unsafe static extern IntPtr
- PyUnicode_AS_UNICODE(IntPtr op);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ EntryPoint = "PyUnicodeUCS2_AsUnicode",
+ ExactSpelling = true, CharSet = CharSet.Unicode)]
+ public unsafe static extern IntPtr
+ PyUnicode_AS_UNICODE(IntPtr op);
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- EntryPoint="PyUnicodeUCS2_FromOrdinal",
- ExactSpelling=true, CharSet=CharSet.Unicode)]
- public unsafe static extern IntPtr
- PyUnicode_FromOrdinal(int c);
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ EntryPoint = "PyUnicodeUCS2_FromOrdinal",
+ ExactSpelling = true, CharSet = CharSet.Unicode)]
+ public unsafe static extern IntPtr
+ PyUnicode_FromOrdinal(int c);
- public static IntPtr PyUnicode_FromString(string s)
- {
- return PyUnicode_FromUnicode(s, (s.Length));
- }
+ public static IntPtr PyUnicode_FromString(string s) {
+ return PyUnicode_FromUnicode(s, (s.Length));
+ }
- public unsafe static string GetManagedString(IntPtr op)
- {
- IntPtr type = PyObject_TYPE(op);
+ public unsafe static string GetManagedString(IntPtr op) {
+ IntPtr type = PyObject_TYPE(op);
- if (type == Runtime.PyStringType)
- {
- return Marshal.PtrToStringAnsi(
- PyString_AS_STRING(op),
- Runtime.PyString_Size(op)
- );
- }
+ if (type == Runtime.PyStringType) {
+ return Marshal.PtrToStringAnsi(
+ PyString_AS_STRING(op),
+ Runtime.PyString_Size(op)
+ );
+ }
- if (type == Runtime.PyUnicodeType)
- {
- char* p = Runtime.PyUnicode_AsUnicode(op);
- int size = Runtime.PyUnicode_GetSize(op);
- return new String(p, 0, size);
- }
+ if (type == Runtime.PyUnicodeType) {
+ char* p = Runtime.PyUnicode_AsUnicode(op);
+ int size = Runtime.PyUnicode_GetSize(op);
+ return new String(p, 0, size);
+ }
- return null;
- }
+ return null;
+ }
#endif
#if (UCS4)
@@ -1172,439 +1168,439 @@ namespace Python.Runtime {
}
#endif
- //====================================================================
- // Python dictionary API
- //====================================================================
-
- public static bool PyDict_Check(IntPtr ob) {
- return PyObject_TYPE(ob) == Runtime.PyDictType;
- }
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyDict_New();
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyDictProxy_New(IntPtr dict);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyDict_GetItem(IntPtr pointer, IntPtr key);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyDict_GetItemString(IntPtr pointer, string key);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyDict_SetItem(IntPtr pointer, IntPtr key, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyDict_SetItemString(IntPtr pointer, string key, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyDict_DelItem(IntPtr pointer, IntPtr key);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyMapping_HasKey(IntPtr pointer, IntPtr key);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyDict_Keys(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyDict_Values(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyDict_Items(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyDict_Copy(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyDict_Update(IntPtr pointer, IntPtr other);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyDict_Clear(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyDict_Size(IntPtr pointer);
-
-
- //====================================================================
- // Python list API
- //====================================================================
-
- public static bool PyList_Check(IntPtr ob) {
- return PyObject_TYPE(ob) == Runtime.PyListType;
- }
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyList_New(int size);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyList_AsTuple(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyList_GetItem(IntPtr pointer, int index);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyList_SetItem(IntPtr pointer, int index, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyList_Insert(IntPtr pointer, int index, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyList_Append(IntPtr pointer, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyList_Reverse(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyList_Sort(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyList_GetSlice(IntPtr pointer, int start, int end);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyList_SetSlice(IntPtr pointer, int start, int end, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyList_Size(IntPtr pointer);
-
-
- //====================================================================
- // Python tuple API
- //====================================================================
-
- public static bool PyTuple_Check(IntPtr ob) {
- return PyObject_TYPE(ob) == Runtime.PyTupleType;
- }
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyTuple_New(int size);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyTuple_GetItem(IntPtr pointer, int index);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyTuple_SetItem(IntPtr pointer, int index, IntPtr value);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyTuple_GetSlice(IntPtr pointer, int start, int end);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyTuple_Size(IntPtr pointer);
-
-
- //====================================================================
- // Python iterator API
- //====================================================================
-
- [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
- ExactSpelling = true, CharSet = CharSet.Ansi)]
- public unsafe static extern bool
- PyIter_Check(IntPtr pointer);
-
- [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
- ExactSpelling = true, CharSet = CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyIter_Next(IntPtr pointer);
-
- //====================================================================
- // Python module API
- //====================================================================
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern string
- PyModule_GetName(IntPtr module);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyModule_GetDict(IntPtr module);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern string
- PyModule_GetFilename(IntPtr module);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyImport_Import(IntPtr name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyImport_ImportModule(string name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyImport_ReloadModule(IntPtr module);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyImport_AddModule(string name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyImport_GetModuleDict();
-
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PySys_SetArgv(int argc, IntPtr argv);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PySys_GetObject(string name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PySys_SetObject(string name, IntPtr ob);
-
-
- //====================================================================
- // Python type object API
- //====================================================================
-
- public static bool PyType_Check(IntPtr ob) {
- return PyObject_TypeCheck(ob, Runtime.PyTypeType);
- }
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern bool
- PyType_IsSubtype(IntPtr t1, IntPtr t2);
-
- public static bool PyObject_TypeCheck(IntPtr ob, IntPtr tp) {
- IntPtr t = PyObject_TYPE(ob);
- return (t == tp) || PyType_IsSubtype(t, tp);
- }
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyType_GenericNew(IntPtr type, IntPtr args, IntPtr kw);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyType_GenericAlloc(IntPtr type, int n);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyType_Ready(IntPtr type);
-
- [CLSCompliant(false)]
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- _PyType_Lookup(IntPtr type, IntPtr name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_GenericGetAttr(IntPtr obj, IntPtr name);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyObject_GenericSetAttr(IntPtr obj, IntPtr name, IntPtr value);
-
- [CLSCompliant(false)]
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- _PyObject_GetDictPtr(IntPtr obj);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyObject_GC_New(IntPtr tp);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyObject_GC_Del(IntPtr tp);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyObject_GC_Track(IntPtr tp);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyObject_GC_UnTrack(IntPtr tp);
-
-
- //====================================================================
- // Python memory API
- //====================================================================
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyMem_Malloc(int size);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyMem_Realloc(IntPtr ptr, int size);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyMem_Free(IntPtr ptr);
-
-
- //====================================================================
- // Python exception API
- //====================================================================
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyErr_SetString(IntPtr ob, string message);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyErr_SetObject(IntPtr ob, IntPtr message);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyErr_SetFromErrno(IntPtr ob);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyErr_SetNone(IntPtr ob);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyErr_ExceptionMatches(IntPtr exception);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyErr_GivenExceptionMatches(IntPtr ob, IntPtr val);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyErr_NormalizeException(IntPtr ob, IntPtr val, IntPtr tb);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern int
- PyErr_Occurred();
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyErr_Fetch(ref IntPtr ob, ref IntPtr val, ref IntPtr tb);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyErr_Restore(IntPtr ob, IntPtr val, IntPtr tb);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyErr_Clear();
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern void
- PyErr_Print();
-
-
- //====================================================================
- // Miscellaneous
- //====================================================================
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyMethod_Self(IntPtr ob);
-
- [DllImport(Runtime.dll, CallingConvention=CallingConvention.Cdecl,
- ExactSpelling=true, CharSet=CharSet.Ansi)]
- public unsafe static extern IntPtr
- PyMethod_Function(IntPtr ob);
-
- }
+ //====================================================================
+ // Python dictionary API
+ //====================================================================
+
+ public static bool PyDict_Check(IntPtr ob) {
+ return PyObject_TYPE(ob) == Runtime.PyDictType;
+ }
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyDict_New();
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyDictProxy_New(IntPtr dict);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyDict_GetItem(IntPtr pointer, IntPtr key);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyDict_GetItemString(IntPtr pointer, string key);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyDict_SetItem(IntPtr pointer, IntPtr key, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyDict_SetItemString(IntPtr pointer, string key, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyDict_DelItem(IntPtr pointer, IntPtr key);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyMapping_HasKey(IntPtr pointer, IntPtr key);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyDict_Keys(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyDict_Values(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyDict_Items(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyDict_Copy(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyDict_Update(IntPtr pointer, IntPtr other);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyDict_Clear(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyDict_Size(IntPtr pointer);
+
+
+ //====================================================================
+ // Python list API
+ //====================================================================
+
+ public static bool PyList_Check(IntPtr ob) {
+ return PyObject_TYPE(ob) == Runtime.PyListType;
+ }
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyList_New(int size);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyList_AsTuple(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyList_GetItem(IntPtr pointer, int index);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyList_SetItem(IntPtr pointer, int index, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyList_Insert(IntPtr pointer, int index, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyList_Append(IntPtr pointer, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyList_Reverse(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyList_Sort(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyList_GetSlice(IntPtr pointer, int start, int end);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyList_SetSlice(IntPtr pointer, int start, int end, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyList_Size(IntPtr pointer);
+
+
+ //====================================================================
+ // Python tuple API
+ //====================================================================
+
+ public static bool PyTuple_Check(IntPtr ob) {
+ return PyObject_TYPE(ob) == Runtime.PyTupleType;
+ }
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyTuple_New(int size);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyTuple_GetItem(IntPtr pointer, int index);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyTuple_SetItem(IntPtr pointer, int index, IntPtr value);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyTuple_GetSlice(IntPtr pointer, int start, int end);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyTuple_Size(IntPtr pointer);
+
+
+ //====================================================================
+ // Python iterator API
+ //====================================================================
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern bool
+ PyIter_Check(IntPtr pointer);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyIter_Next(IntPtr pointer);
+
+ //====================================================================
+ // Python module API
+ //====================================================================
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern string
+ PyModule_GetName(IntPtr module);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyModule_GetDict(IntPtr module);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern string
+ PyModule_GetFilename(IntPtr module);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyImport_Import(IntPtr name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyImport_ImportModule(string name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyImport_ReloadModule(IntPtr module);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyImport_AddModule(string name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyImport_GetModuleDict();
+
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PySys_SetArgv(int argc, IntPtr argv);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PySys_GetObject(string name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PySys_SetObject(string name, IntPtr ob);
+
+
+ //====================================================================
+ // Python type object API
+ //====================================================================
+
+ public static bool PyType_Check(IntPtr ob) {
+ return PyObject_TypeCheck(ob, Runtime.PyTypeType);
+ }
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern bool
+ PyType_IsSubtype(IntPtr t1, IntPtr t2);
+
+ public static bool PyObject_TypeCheck(IntPtr ob, IntPtr tp) {
+ IntPtr t = PyObject_TYPE(ob);
+ return (t == tp) || PyType_IsSubtype(t, tp);
+ }
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyType_GenericNew(IntPtr type, IntPtr args, IntPtr kw);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyType_GenericAlloc(IntPtr type, int n);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyType_Ready(IntPtr type);
+
+ [CLSCompliant(false)]
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ _PyType_Lookup(IntPtr type, IntPtr name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_GenericGetAttr(IntPtr obj, IntPtr name);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyObject_GenericSetAttr(IntPtr obj, IntPtr name, IntPtr value);
+
+ [CLSCompliant(false)]
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ _PyObject_GetDictPtr(IntPtr obj);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyObject_GC_New(IntPtr tp);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyObject_GC_Del(IntPtr tp);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyObject_GC_Track(IntPtr tp);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyObject_GC_UnTrack(IntPtr tp);
+
+
+ //====================================================================
+ // Python memory API
+ //====================================================================
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyMem_Malloc(int size);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyMem_Realloc(IntPtr ptr, int size);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyMem_Free(IntPtr ptr);
+
+
+ //====================================================================
+ // Python exception API
+ //====================================================================
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyErr_SetString(IntPtr ob, string message);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyErr_SetObject(IntPtr ob, IntPtr message);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyErr_SetFromErrno(IntPtr ob);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyErr_SetNone(IntPtr ob);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyErr_ExceptionMatches(IntPtr exception);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyErr_GivenExceptionMatches(IntPtr ob, IntPtr val);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyErr_NormalizeException(IntPtr ob, IntPtr val, IntPtr tb);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern int
+ PyErr_Occurred();
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyErr_Fetch(ref IntPtr ob, ref IntPtr val, ref IntPtr tb);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyErr_Restore(IntPtr ob, IntPtr val, IntPtr tb);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyErr_Clear();
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern void
+ PyErr_Print();
+
+
+ //====================================================================
+ // Miscellaneous
+ //====================================================================
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyMethod_Self(IntPtr ob);
+
+ [DllImport(Runtime.dll, CallingConvention = CallingConvention.Cdecl,
+ ExactSpelling = true, CharSet = CharSet.Ansi)]
+ public unsafe static extern IntPtr
+ PyMethod_Function(IntPtr ob);
+
+ }
}
diff --git a/Wox.Plugin.SystemPlugins/FileSystem/FileSystemPlugin.cs b/Wox.Plugin.SystemPlugins/FileSystem/FileSystemPlugin.cs
index 0b4de30dc6..7fef245b5d 100644
--- a/Wox.Plugin.SystemPlugins/FileSystem/FileSystemPlugin.cs
+++ b/Wox.Plugin.SystemPlugins/FileSystem/FileSystemPlugin.cs
@@ -40,35 +40,28 @@ namespace Wox.Plugin.SystemPlugins.FileSystem {
#endregion Misc
protected override List QueryInternal(Query query) {
-
- #region 1
+ var results = new List();
+ var input = query.RawQuery.ToLower();
+ var inputName = input.Split(new string[] { @"\" }, StringSplitOptions.None).First().ToLower();
+ var link = UserSettingStorage.Instance.FolderLinks.FirstOrDefault(x => x.Nickname.Equals(inputName, StringComparison.OrdinalIgnoreCase));
+ var currentPath = link == null ? input : link.Path + input.Remove(0, inputName.Length);
+ InitialDriverList();
//TODO: Consider always clearing the cache
- List results = new List();
+ //TODO: Prove the following was not ever actually used
//if (string.IsNullOrEmpty(query.RawQuery)) {
// // clear the cache
// if (parentDirectories.Count > 0) parentDirectories.Clear();
// return results;
//}
- #endregion 1
-
- var input = query.RawQuery.ToLower();
- var inputName = input.Split(new string[] { @"\" }, StringSplitOptions.None).First().ToLower();
- var link = UserSettingStorage.Instance.FolderLinks.FirstOrDefault(x => x.Nickname.Equals(inputName, StringComparison.OrdinalIgnoreCase));
- var currentPath = link == null ? input : link.Path + input.Remove(0, inputName.Length);
-
- InitialDriverList();
-
foreach (var item in UserSettingStorage.Instance.FolderLinks.Where(x => x.Nickname.StartsWith(input, StringComparison.OrdinalIgnoreCase))) {
- //if (item.Nickname.StartsWith(input, StringComparison.OrdinalIgnoreCase)) { //&& item.Nickname.Length != input.Length) {
results.Add(new Result(item.Nickname, "Images/folder.png") {
Action = (c) => {
context.ChangeQuery(item.Nickname);
return false;
}
});
- //}
}
if (link == null && !driverNames.Any(input.StartsWith))
@@ -77,46 +70,6 @@ namespace Wox.Plugin.SystemPlugins.FileSystem {
QueryInternal_Directory_Exists(currentPath, input, results);
return results;
-
- /*
- // change to search in current directory
- string parentDir = null;
- try {
- parentDir = Path.GetDirectoryName(input);
- }
- catch { }
-
-
-
-
- return results;
- if (!string.IsNullOrEmpty(parentDir) && results.Count == 0) {
- parentDir = parentDir.TrimEnd('\\', '/');
- //TODO: Why are we doing the following check
-
- //FUCK THIS CODE o.O!!!!!!!
-
- if (parentDirectories.ContainsKey(parentDir)) {
- var fuzzy = FuzzyMatcher.Create(Path.GetFileName(currentPath).ToLower());
- foreach (var dir in parentDirectories[parentDir]) {
- if ((dir.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) continue;
-
- var matchResult = fuzzy.Evaluate(dir.Name);
- if (!matchResult.Success) continue;
-
- results.Add(new Result(dir.Name, "Images/folder.png") {
- Score = matchResult.Score,
- Action = (c) => {
- context.ChangeQuery(dir.FullName);
- return false;
- }
- });
- }
- }
- }
-
- return results;
- */
}
private void InitialDriverList() {
@@ -157,30 +110,11 @@ namespace Wox.Plugin.SystemPlugins.FileSystem {
results.Add(result);
}
-
- //if (results.Count == 0) {
- // results.Add(new Result("Open this directory", "Images/folder.png", "No files in this directory") {
- // Action = (c) => {
- // Process.Start(currentPath);
- // return true;
- // }
- // });
- //}
}
else {
- //results.Add(new Result("Open this directory", "Images/folder.png", string.Format("path: {0}", currentPath)) {
- // Score = 50,
- // Action = (c) => {
- // Process.Start(currentPath);
- // return true;
- // }
- //});
+ //TODO: Make sure we do not need anything here
}
-
- /**************************************************************/
- /**************************************************************/
-
if (results.Count == 0) {
results.Add(new Result("Open this directory", "Images/folder.png", "No files in this directory") {
Action = (c) => {
@@ -190,12 +124,6 @@ namespace Wox.Plugin.SystemPlugins.FileSystem {
});
}
-
-
-
- /**************************************************************/
- /**************************************************************/
-
var Folder = Path.GetDirectoryName(currentPath);
if (Folder != null) {
var dirInfo1 = new DirectoryInfo(Folder);
diff --git a/Wox/Wox.csproj b/Wox/Wox.csproj
index 0c81617d74..dd4c4e29d2 100644
--- a/Wox/Wox.csproj
+++ b/Wox/Wox.csproj
@@ -33,7 +33,7 @@
true
- x86
+ AnyCPU
true
full
false