eric6/DebugClients/Python/DebugClientBase.py

branch
multi_processing
changeset 7802
eefe954f01e8
parent 7646
39e3db2b4936
parent 7785
9978016560ec
child 7818
5c9271c2f662
--- a/eric6/DebugClients/Python/DebugClientBase.py	Sun Jul 05 11:11:24 2020 +0200
+++ b/eric6/DebugClients/Python/DebugClientBase.py	Sun Oct 18 12:35:30 2020 +0200
@@ -19,10 +19,8 @@
 import atexit
 import signal
 import time
-if sys.version_info >= (3, 4):
-    import types
-else:
-    import imp
+import types
+import importlib
 
 
 import DebugClientCapabilities
@@ -166,10 +164,7 @@
         self.framenr = 0
         
         # The context to run the debugged program in.
-        if sys.version_info >= (3, 4):
-            self.debugMod = types.ModuleType("__main__")
-        else:
-            self.debugMod = imp.new_module('__main__')
+        self.debugMod = types.ModuleType('__main__')
         self.debugMod.__dict__['__builtins__'] = __builtins__
 
         # The list of complete lines to execute.
@@ -200,6 +195,7 @@
         
         self.callTraceEnabled = None
         
+        
         self.compile_command = codeop.CommandCompiler()
         
         self.coding_re = re.compile(r"coding[:=]\s*([-\w_.]+)")
@@ -228,11 +224,10 @@
         else:
             default = 'utf-8'
             try:
-                f = open(filename, 'rb')
-                # read the first and second line
-                text = f.readline()
-                text = "{0}{1}".format(text, f.readline())
-                f.close()
+                with open(filename, 'rb') as f:
+                    # read the first and second line
+                    text = f.readline()
+                    text = "{0}{1}".format(text, f.readline())
             except IOError:
                 self.__coding = default
                 return
@@ -372,6 +367,16 @@
                     "stack": stack,
                 })
         
+        elif method == "RequestDisassembly":
+            if self.disassembly is not None:
+                self.sendJsonCommand("ResponseDisassembly", {
+                    "disassembly": self.disassembly
+                })
+            else:
+                self.sendJsonCommand("ResponseDisassembly", {
+                    "disassembly": {}
+                })
+        
         elif method == "RequestCapabilities":
             clientType = "Python3"
             self.sendJsonCommand("ResponseCapabilities", {
@@ -413,6 +418,7 @@
         elif method == "RequestLoad":
             self._fncache = {}
             self.dircache = []
+            self.disassembly = None
             sys.argv = []
             self.__setCoding(params["filename"])
             sys.argv.append(params["filename"])
@@ -454,6 +460,7 @@
                 self.mainThread.run(code, self.debugMod.__dict__, debug=True)
 
         elif method == "RequestRun":
+            self.disassembly = None
             sys.argv = []
             self.__setCoding(params["filename"])
             sys.argv.append(params["filename"])
@@ -489,6 +496,7 @@
 
         elif method == "RequestCoverage":
             from coverage import Coverage
+            self.disassembly = None
             sys.argv = []
             self.__setCoding(params["filename"])
             sys.argv.append(params["filename"])
@@ -525,6 +533,7 @@
         elif method == "RequestProfile":
             sys.setprofile(None)
             import PyProfile
+            self.disassembly = None
             sys.argv = []
             self.__setCoding(params["filename"])
             sys.argv.append(params["filename"])
@@ -850,14 +859,9 @@
                             discoveryStart, top_level_dir=top_level_dir)
                 else:
                     if params["filename"]:
-                        if sys.version_info >= (3, 4):
-                            import importlib
-                            spec = importlib.util.spec_from_file_location(
-                                params["testname"], params["filename"])
-                            utModule = importlib.util.module_from_spec(spec)
-                        else:
-                            utModule = imp.load_source(
-                                params["testname"], params["filename"])
+                        spec = importlib.util.spec_from_file_location(
+                            params["testname"], params["filename"])
+                        utModule = importlib.util.module_from_spec(spec)
                     else:
                         utModule = None
                     if params["failed"]:
@@ -904,6 +908,7 @@
         
         elif method == "RequestUTRun":
             from DCTestResult import DCTestResult
+            self.disassembly = None
             self.testResult = DCTestResult(self, params["failfast"])
             if self.cover:
                 self.cover.start()
@@ -965,6 +970,16 @@
                     )
         return testCases
     
+    def setDisassembly(self, disassembly):
+        """
+        Public method to store a disassembly of the code object raising an
+        exception.
+        
+        @param disassembly dictionary containing the disassembly information
+        @type dict
+        """
+        self.disassembly = disassembly
+    
     def sendJsonCommand(self, method, params):
         """
         Public method to send a single command or response to the IDE.
@@ -1696,7 +1711,7 @@
                     ("internalId", "int", "{0}".format(value.internalId())))
                 varlist.append(("internalPointer", "void *",
                                 "{0}".format(value.internalPointer())))
-        elif qttype == 'QRegExp':
+        elif qttype in ('QRegExp', "QRegularExpression"):
             varlist.append(("pattern", "str", "{0}".format(value.pattern())))
         
         # GUI stuff

eric ide

mercurial