Fixed an issue in the Python debuggers related to the usage of the locals dictionary.

Thu, 10 Mar 2011 10:27:57 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 10 Mar 2011 10:27:57 +0100
changeset 935
bf9ee1e00bc5
parent 934
657269549914
child 937
336c8f1ee7bb

Fixed an issue in the Python debuggers related to the usage of the locals dictionary.

APIs/Python3/eric5.api file | annotate | diff | comparison | revisions
DebugClients/Python/DebugBase.py file | annotate | diff | comparison | revisions
DebugClients/Python/DebugClientBase.py file | annotate | diff | comparison | revisions
DebugClients/Python3/DebugBase.py file | annotate | diff | comparison | revisions
DebugClients/Python3/DebugClientBase.py file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric5.DebugClients.Python.DebugBase.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.DebugClients.Python3.DebugBase.html file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric5.api	Fri Mar 04 20:03:47 2011 +0100
+++ b/APIs/Python3/eric5.api	Thu Mar 10 10:27:57 2011 +0100
@@ -151,6 +151,7 @@
 eric5.DebugClients.Python.DebugBase.DebugBase.dispatch_return?4(frame, arg)
 eric5.DebugClients.Python.DebugBase.DebugBase.fix_frame_filename?4(frame)
 eric5.DebugClients.Python.DebugBase.DebugBase.getCurrentFrame?4()
+eric5.DebugClients.Python.DebugBase.DebugBase.getCurrentFrameLocals?4()
 eric5.DebugClients.Python.DebugBase.DebugBase.getEvent?4()
 eric5.DebugClients.Python.DebugBase.DebugBase.getStack?4()
 eric5.DebugClients.Python.DebugBase.DebugBase.get_break?4(filename, lineno)
@@ -355,6 +356,7 @@
 eric5.DebugClients.Python3.DebugBase.DebugBase.dispatch_return?4(frame, arg)
 eric5.DebugClients.Python3.DebugBase.DebugBase.fix_frame_filename?4(frame)
 eric5.DebugClients.Python3.DebugBase.DebugBase.getCurrentFrame?4()
+eric5.DebugClients.Python3.DebugBase.DebugBase.getCurrentFrameLocals?4()
 eric5.DebugClients.Python3.DebugBase.DebugBase.getEvent?4()
 eric5.DebugClients.Python3.DebugBase.DebugBase.getStack?4()
 eric5.DebugClients.Python3.DebugBase.DebugBase.get_break?4(filename, lineno)
--- a/DebugClients/Python/DebugBase.py	Fri Mar 04 20:03:47 2011 +0100
+++ b/DebugClients/Python/DebugBase.py	Thu Mar 10 10:27:57 2011 +0100
@@ -62,6 +62,7 @@
         
         # current frame we are at
         self.currentFrame = None
+        self.currentFrameLocals = None
         
         # frame that we are stepping in, can be different than currentFrame
         self.stepFrame = None
@@ -85,6 +86,14 @@
         """
         return self.currentFrame        
     
+    def getCurrentFrameLocals(self):
+        """
+        Public method to return the locals dictionary of the current frame.
+        
+        @return locals dictionary of the current frame
+        """
+        return self.currentFrameLocals        
+    
     def step(self, traceMode):
         """
         Public method to perform a step operation in this thread.
@@ -527,6 +536,8 @@
             self._dbgClient.mainFrame = frame
 
         self.currentFrame = frame
+        self.currentFrameLocals = frame.f_locals
+        # remember the locals because it is reinitialized when accessed
         
         fr = frame
         stack = []
--- a/DebugClients/Python/DebugClientBase.py	Fri Mar 04 20:03:47 2011 +0100
+++ b/DebugClients/Python/DebugClientBase.py	Thu Mar 10 10:27:57 2011 +0100
@@ -695,7 +695,7 @@
             if cmd == RequestEval:
                 try:
                     value = eval(arg, self.currentThread.getCurrentFrame().f_globals,
-                                      self.currentThread.getCurrentFrame().f_locals)
+                                      self.currentThread.getCurrentFrameLocals())
                 except:
                     # Report the exception and the traceback
                     try:
@@ -725,7 +725,7 @@
             
             if cmd == RequestExec:
                 _globals = self.currentThread.getCurrentFrame().f_globals
-                _locals = self.currentThread.getCurrentFrame().f_locals
+                _locals = self.currentThread.getCurrentFrameLocals()
                 try:
                     code = compile(arg + '\n', '<stdin>', 'single')
                     exec code in _globals, _locals
@@ -888,7 +888,7 @@
                                     cf = cf.f_back
                                     frmnr -= 1
                                 _globals = cf.f_globals
-                                _locals = cf.f_locals
+                                _locals = self.currentThread.getCurrentFrameLocals()
                         # reset sys.stdout to our redirector (unconditionally)
                         if _globals.has_key("sys"):
                             __stdout = _globals["sys"].stdout
--- a/DebugClients/Python3/DebugBase.py	Fri Mar 04 20:03:47 2011 +0100
+++ b/DebugClients/Python3/DebugBase.py	Thu Mar 10 10:27:57 2011 +0100
@@ -61,6 +61,7 @@
         
         # current frame we are at
         self.currentFrame = None
+        self.currentFrameLocals = None
         
         # frame that we are stepping in, can be different than currentFrame
         self.stepFrame = None
@@ -84,6 +85,14 @@
         """
         return self.currentFrame        
     
+    def getCurrentFrameLocals(self):
+        """
+        Public method to return the locals dictionary of the current frame.
+        
+        @return locals dictionary of the current frame
+        """
+        return self.currentFrameLocals        
+    
     def step(self, traceMode):
         """
         Public method to perform a step operation in this thread.
@@ -536,6 +545,8 @@
             self._dbgClient.mainFrame = frame
 
         self.currentFrame = frame
+        self.currentFrameLocals = frame.f_locals
+        # remember the locals because it is reinitialized when accessed
         
         fr = frame
         stack = []
--- a/DebugClients/Python3/DebugClientBase.py	Fri Mar 04 20:03:47 2011 +0100
+++ b/DebugClients/Python3/DebugClientBase.py	Thu Mar 10 10:27:57 2011 +0100
@@ -691,7 +691,7 @@
             if cmd == RequestEval:
                 try:
                     value = eval(arg, self.currentThread.getCurrentFrame().f_globals,
-                                      self.currentThread.getCurrentFrame().f_locals)
+                                      self.currentThread.getCurrentFrameLocals())
                 except:
                     # Report the exception and the traceback
                     try:
@@ -722,7 +722,7 @@
             
             if cmd == RequestExec:
                 _globals = self.currentThread.getCurrentFrame().f_globals
-                _locals = self.currentThread.getCurrentFrame().f_locals
+                _locals = self.currentThread.getCurrentFrameLocals()
                 try:
                     code = compile(arg + '\n', '<stdin>', 'single')
                     exec(code, _globals, _locals)
@@ -887,7 +887,7 @@
                                     cf = cf.f_back
                                     frmnr -= 1
                                 _globals = cf.f_globals
-                                _locals = cf.f_locals
+                                _locals = self.currentThread.getCurrentFrameLocals()
                         # reset sys.stdout to our redirector (unconditionally)
                         if "sys" in _globals:
                             __stdout = _globals["sys"].stdout
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Fri Mar 04 20:03:47 2011 +0100
+++ b/Documentation/Help/source.qhp	Thu Mar 10 10:27:57 2011 +0100
@@ -6492,6 +6492,7 @@
       <keyword name="DebugBase.dispatch_return" id="DebugBase.dispatch_return" ref="eric5.DebugClients.Python.DebugBase.html#DebugBase.dispatch_return" />
       <keyword name="DebugBase.fix_frame_filename" id="DebugBase.fix_frame_filename" ref="eric5.DebugClients.Python.DebugBase.html#DebugBase.fix_frame_filename" />
       <keyword name="DebugBase.getCurrentFrame" id="DebugBase.getCurrentFrame" ref="eric5.DebugClients.Python.DebugBase.html#DebugBase.getCurrentFrame" />
+      <keyword name="DebugBase.getCurrentFrameLocals" id="DebugBase.getCurrentFrameLocals" ref="eric5.DebugClients.Python.DebugBase.html#DebugBase.getCurrentFrameLocals" />
       <keyword name="DebugBase.getEvent" id="DebugBase.getEvent" ref="eric5.DebugClients.Python.DebugBase.html#DebugBase.getEvent" />
       <keyword name="DebugBase.getStack" id="DebugBase.getStack" ref="eric5.DebugClients.Python.DebugBase.html#DebugBase.getStack" />
       <keyword name="DebugBase.get_break" id="DebugBase.get_break" ref="eric5.DebugClients.Python.DebugBase.html#DebugBase.get_break" />
@@ -6660,6 +6661,7 @@
       <keyword name="DebugBase.dispatch_return" id="DebugBase.dispatch_return" ref="eric5.DebugClients.Python3.DebugBase.html#DebugBase.dispatch_return" />
       <keyword name="DebugBase.fix_frame_filename" id="DebugBase.fix_frame_filename" ref="eric5.DebugClients.Python3.DebugBase.html#DebugBase.fix_frame_filename" />
       <keyword name="DebugBase.getCurrentFrame" id="DebugBase.getCurrentFrame" ref="eric5.DebugClients.Python3.DebugBase.html#DebugBase.getCurrentFrame" />
+      <keyword name="DebugBase.getCurrentFrameLocals" id="DebugBase.getCurrentFrameLocals" ref="eric5.DebugClients.Python3.DebugBase.html#DebugBase.getCurrentFrameLocals" />
       <keyword name="DebugBase.getEvent" id="DebugBase.getEvent" ref="eric5.DebugClients.Python3.DebugBase.html#DebugBase.getEvent" />
       <keyword name="DebugBase.getStack" id="DebugBase.getStack" ref="eric5.DebugClients.Python3.DebugBase.html#DebugBase.getStack" />
       <keyword name="DebugBase.get_break" id="DebugBase.get_break" ref="eric5.DebugClients.Python3.DebugBase.html#DebugBase.get_break" />
--- a/Documentation/Source/eric5.DebugClients.Python.DebugBase.html	Fri Mar 04 20:03:47 2011 +0100
+++ b/Documentation/Source/eric5.DebugClients.Python.DebugBase.html	Thu Mar 10 10:27:57 2011 +0100
@@ -105,6 +105,9 @@
 <td><a href="#DebugBase.getCurrentFrame">getCurrentFrame</a></td>
 <td>Public method to return the current frame.</td>
 </tr><tr>
+<td><a href="#DebugBase.getCurrentFrameLocals">getCurrentFrameLocals</a></td>
+<td>Public method to return the locals dictionary of the current frame.</td>
+</tr><tr>
 <td><a href="#DebugBase.getEvent">getEvent</a></td>
 <td>Public method to return the last debugger event.</td>
 </tr><tr>
@@ -376,6 +379,16 @@
 <dd>
 the current frame
 </dd>
+</dl><a NAME="DebugBase.getCurrentFrameLocals" ID="DebugBase.getCurrentFrameLocals"></a>
+<h4>DebugBase.getCurrentFrameLocals</h4>
+<b>getCurrentFrameLocals</b>(<i></i>)
+<p>
+        Public method to return the locals dictionary of the current frame.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+locals dictionary of the current frame
+</dd>
 </dl><a NAME="DebugBase.getEvent" ID="DebugBase.getEvent"></a>
 <h4>DebugBase.getEvent</h4>
 <b>getEvent</b>(<i></i>)
--- a/Documentation/Source/eric5.DebugClients.Python3.DebugBase.html	Fri Mar 04 20:03:47 2011 +0100
+++ b/Documentation/Source/eric5.DebugClients.Python3.DebugBase.html	Thu Mar 10 10:27:57 2011 +0100
@@ -108,6 +108,9 @@
 <td><a href="#DebugBase.getCurrentFrame">getCurrentFrame</a></td>
 <td>Public method to return the current frame.</td>
 </tr><tr>
+<td><a href="#DebugBase.getCurrentFrameLocals">getCurrentFrameLocals</a></td>
+<td>Public method to return the locals dictionary of the current frame.</td>
+</tr><tr>
 <td><a href="#DebugBase.getEvent">getEvent</a></td>
 <td>Public method to return the last debugger event.</td>
 </tr><tr>
@@ -390,6 +393,16 @@
 <dd>
 the current frame
 </dd>
+</dl><a NAME="DebugBase.getCurrentFrameLocals" ID="DebugBase.getCurrentFrameLocals"></a>
+<h4>DebugBase.getCurrentFrameLocals</h4>
+<b>getCurrentFrameLocals</b>(<i></i>)
+<p>
+        Public method to return the locals dictionary of the current frame.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+locals dictionary of the current frame
+</dd>
 </dl><a NAME="DebugBase.getEvent" ID="DebugBase.getEvent"></a>
 <h4>DebugBase.getEvent</h4>
 <b>getEvent</b>(<i></i>)

eric ide

mercurial