diff --git a/src/runtime/pythonengine.cs b/src/runtime/pythonengine.cs
index 700543839..5073067d3 100644
--- a/src/runtime/pythonengine.cs
+++ b/src/runtime/pythonengine.cs
@@ -503,7 +503,7 @@ public static PyObject ReloadModule(PyObject module)
///
public static PyObject ModuleFromString(string name, string code)
{
- IntPtr c = Runtime.Py_CompileString(code, "none", (IntPtr)257);
+ IntPtr c = Runtime.Py_CompileString(code, "none", (int)RunFlagType.File);
Runtime.CheckExceptionOccurred();
IntPtr m = Runtime.PyImport_ExecCodeModule(name, c);
Runtime.CheckExceptionOccurred();
@@ -512,7 +512,7 @@ public static PyObject ModuleFromString(string name, string code)
public static PyObject Compile(string code, string filename = "", RunFlagType mode = RunFlagType.File)
{
- var flag = (IntPtr)mode;
+ var flag = (int)mode;
IntPtr ptr = Runtime.Py_CompileString(code, filename, flag);
Runtime.CheckExceptionOccurred();
return new PyObject(ptr);
@@ -610,7 +610,7 @@ internal static PyObject RunString(string code, IntPtr? globals, IntPtr? locals,
}
}
- public enum RunFlagType
+ public enum RunFlagType : int
{
Single = 256,
File = 257, /* Py_file_input */
diff --git a/src/runtime/runtime.cs b/src/runtime/runtime.cs
index 7a78cd6e1..66f5ed123 100644
--- a/src/runtime/runtime.cs
+++ b/src/runtime/runtime.cs
@@ -763,8 +763,36 @@ public static extern int Py_Main(
[DllImport(_PythonDll, CallingConvention = CallingConvention.Cdecl)]
internal static extern IntPtr PyEval_EvalCode(IntPtr co, IntPtr globals, IntPtr locals);
+#if PYTHON2
+ [DllImport(_PythonDll, CallingConvention = CallingConvention.Cdecl)]
+ internal static extern IntPtr Py_CompileString(string code, string file, int start);
+#else
+ ///
+ /// Return value: New reference.
+ /// This is a simplified interface to Py_CompileStringFlags() below, leaving flags set to NULL.
+ ///
+ internal static IntPtr Py_CompileString(string str, string file, int start)
+ {
+ return Py_CompileStringFlags(str, file, start, IntPtr.Zero);
+ }
+
+ ///
+ /// Return value: New reference.
+ /// This is a simplified interface to Py_CompileStringExFlags() below, with optimize set to -1.
+ ///
+ internal static IntPtr Py_CompileStringFlags(string str, string file, int start, IntPtr flags)
+ {
+ return Py_CompileStringExFlags(str, file, start, flags, -1);
+ }
+
+ ///
+ /// Return value: New reference.
+ /// Like Py_CompileStringObject(), but filename is a byte string decoded from the filesystem encoding(os.fsdecode()).
+ ///
+ ///
[DllImport(_PythonDll, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr Py_CompileString(string code, string file, IntPtr tok);
+ internal static extern IntPtr Py_CompileStringExFlags(string str, string file, int start, IntPtr flags, int optimize);
+#endif
[DllImport(_PythonDll, CallingConvention = CallingConvention.Cdecl)]
internal static extern IntPtr PyImport_ExecCodeModule(string name, IntPtr code);