From c6cc3daa339bcdd5bdd6ea860047913999319610 Mon Sep 17 00:00:00 2001 From: ywg16-pc <hbtmdxywg@126.com> Date: Wed, 10 Jan 2018 16:14:12 +0800 Subject: [PATCH] fixed bug of Exec method #591 --- src/embed_tests/pyrunstring.cs | 15 +++++++++++++++ src/runtime/pythonengine.cs | 10 ++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/embed_tests/pyrunstring.cs b/src/embed_tests/pyrunstring.cs index 81a1b07ca..07875a2a8 100644 --- a/src/embed_tests/pyrunstring.cs +++ b/src/embed_tests/pyrunstring.cs @@ -57,5 +57,20 @@ public void TestExec() object c = locals.GetItem("c").AsManagedObject(typeof(int)); Assert.AreEqual(111, c); } + + [Test] + public void TestExec2() + { + string code = @" +class Test1(): + pass + +class Test2(): + def __init__(self): + Test1() + +Test2()"; + PythonEngine.Exec(code); + } } } diff --git a/src/runtime/pythonengine.cs b/src/runtime/pythonengine.cs index 556da698f..a23c7ac79 100644 --- a/src/runtime/pythonengine.cs +++ b/src/runtime/pythonengine.cs @@ -496,12 +496,10 @@ internal static PyObject RunString(string code, IntPtr? globals, IntPtr? locals, borrowedGlobals = false; } } - - var borrowedLocals = true; + if (locals == null) { - locals = Runtime.PyDict_New(); - borrowedLocals = false; + locals = globals; } try @@ -516,10 +514,6 @@ internal static PyObject RunString(string code, IntPtr? globals, IntPtr? locals, } finally { - if (!borrowedLocals) - { - Runtime.XDecref(locals.Value); - } if (!borrowedGlobals) { Runtime.XDecref(globals.Value);