src/eric7/UI/PythonDisViewer.py

Fri, 04 Nov 2022 13:52:26 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 04 Nov 2022 13:52:26 +0100
branch
eric7
changeset 9473
3f23dbf37dbe
parent 9413
80c06d472826
child 9653
e67609152c5e
permissions
-rw-r--r--

Resorted the import statements using isort.

7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
8881
54e42bc2437a Updated copyright for 2022.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8541
diff changeset
3 # Copyright (c) 2020 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a widget to visualize the Python Disassembly for some
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 Python sources.
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
11 import dis
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
12 import enum
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 import os
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
14
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
15 from PyQt6.QtCore import Qt, QTimer, pyqtSlot
8318
962bce857696 Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
16 from PyQt6.QtGui import QBrush
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
17 from PyQt6.QtWidgets import QAbstractItemView, QMenu, QTreeWidgetItem, QWidget
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
18
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
19 from eric7 import Preferences
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
20 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
21 from eric7.EricWidgets.EricApplication import ericApp
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
22
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
23 from .Ui_PythonDisViewer import Ui_PythonDisViewer
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
24
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
26 class PythonDisViewerModes(enum.Enum):
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
27 """
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
28 Class implementing the disassembly viewer operation modes.
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
29 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
30
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
31 SOURCEDISASSEMBLY = 0
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
32 TRACEBACK = 1
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
33
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
34
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
35 class PythonDisViewer(QWidget, Ui_PythonDisViewer):
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Class implementing a widget to visualize the Python Disassembly for some
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 Python sources.
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
40
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
41 StartLineRole = Qt.ItemDataRole.UserRole
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
42 EndLineRole = Qt.ItemDataRole.UserRole + 1
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
43 CodeInfoRole = Qt.ItemDataRole.UserRole + 2
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
44
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
45 def __init__(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
46 self, viewmanager, mode=PythonDisViewerModes.SOURCEDISASSEMBLY, parent=None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
47 ):
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
50
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @param viewmanager reference to the viewmanager object
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 @type ViewManager
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
53 @param mode operation mode of the viewer
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
54 @type int
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @param parent reference to the parent widget
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @type QWidget
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
58 super().__init__(parent)
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
59 self.setupUi(self)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
60
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
61 self.setWindowTitle(self.tr("Disassembly"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
62
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.__vm = viewmanager
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.__vmConnected = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
65
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
66 self.__mode = mode
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
67
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.__editor = None
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__source = ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
70
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
71 self.disWidget.setHeaderLabels(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
72 [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
73 self.tr("Line"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
74 self.tr("Offset"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
75 self.tr("Operation"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
76 self.tr("Parameters"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
77 self.tr("Interpreted Parameters"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78 ]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
79 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
80 self.codeInfoWidget.setHeaderLabels([self.tr("Key"), self.tr("Value")])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
81
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
82 self.__disMenu = QMenu(self.disWidget)
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
83 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
84 self.__codeInfoAct = self.__disMenu.addAction(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
85 self.tr("Show Code Info"), self.__showCodeInfo
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
86 )
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
87 self.__disMenu.addSeparator()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
88 self.__disMenu.addAction(self.tr("Expand All"), self.__expandAllDis)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
89 self.__disMenu.addAction(self.tr("Collapse All"), self.__collapseAllDis)
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
90 self.__disMenu.addSeparator()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
91 self.__disMenu.addAction(self.tr("Configure..."), self.__configure)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
92
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
93 self.__codeInfoMenu = QMenu(self.codeInfoWidget)
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
94 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95 self.__codeInfoMenu.addAction(self.tr("Hide"), self.codeInfoWidget.hide)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
96 self.__codeInfoMenu.addAction(self.tr("Expand All"), self.__expandAllCodeInfo)
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
97 self.__codeInfoMenu.addAction(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
98 self.tr("Collapse All"), self.__collapseAllCodeInfo
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
99 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
100 self.__codeInfoMenu.addSeparator()
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
101 self.__codeInfoMenu.addAction(self.tr("Configure..."), self.__configure)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
102
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
103 self.__errorColor = QBrush(Preferences.getPython("DisViewerErrorColor"))
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
104 self.__currentInstructionColor = QBrush(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
105 Preferences.getPython("DisViewerCurrentColor")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
106 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
107 self.__jumpTargetColor = QBrush(Preferences.getPython("DisViewerLabeledColor"))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
108
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
109 self.__showCodeInfoDetails = Preferences.getPython(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
110 "DisViewerExpandCodeInfoDetails"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
111 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
112
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
113 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
114 self.disWidget.itemClicked.connect(self.__disItemClicked)
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
115 self.disWidget.itemCollapsed.connect(self.__resizeDisColumns)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
116 self.disWidget.itemExpanded.connect(self.__resizeDisColumns)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
117 self.disWidget.customContextMenuRequested.connect(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
118 self.__disContextMenuRequested
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
119 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
120
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
121 self.codeInfoWidget.itemCollapsed.connect(self.__resizeCodeInfoColumns)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
122 self.codeInfoWidget.itemExpanded.connect(self.__resizeCodeInfoColumns)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
123 self.codeInfoWidget.customContextMenuRequested.connect(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
124 self.__codeInfoContextMenuRequested
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
125 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
126
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
127 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
128 self.__vm.disViewerStateChanged.connect(self.__disViewerStateChanged)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
129
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
130 self.codeInfoWidget.hide()
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
131 self.hide()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
132
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
133 elif self.__mode == PythonDisViewerModes.TRACEBACK:
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
134 self.__styleLabels()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
135
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
136 def __disContextMenuRequested(self, coord):
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
137 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
138 Private slot to show the context menu of the disassembly widget.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
139
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
140 @param coord position of the mouse pointer
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
141 @type QPoint
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
142 """
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
143 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
144 itm = self.disWidget.itemAt(coord)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
145 self.__codeInfoAct.setEnabled(bool(itm.data(0, self.CodeInfoRole)))
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
146 self.disWidget.setCurrentItem(itm)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
147
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
148 if self.disWidget.topLevelItemCount() > 0:
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
149 # don't show context menu on empty list
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
150 coord = self.disWidget.mapToGlobal(coord)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
151 self.__disMenu.popup(coord)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
152
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 def __editorChanged(self, editor):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 Private slot to handle a change of the current editor.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
156
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 @param editor reference to the current editor
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 @type Editor
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 if editor is not self.__editor:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 if self.__editor:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 self.__editor.clearAllHighlights()
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 self.__editor = editor
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 if self.__editor:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 self.__loadDIS()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
166
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 def __editorSaved(self, editor):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 Private slot to reload the Disassembly after the connected editor was
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 saved.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
171
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 @param editor reference to the editor that performed a save action
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 @type Editor
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 if editor and editor is self.__editor:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 self.__loadDIS()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
177
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
178 def __editorLineChanged(self, editor, lineno):
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 Private slot to handle a mouse button double click in the editor.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
181
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 @param editor reference to the editor, that emitted the signal
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 @type Editor
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
184 @param lineno line number of the editor's cursor (zero based)
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
185 @type int
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 """
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
187 if editor is self.__editor:
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 if editor.isModified():
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 # reload the source
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 QTimer.singleShot(0, self.__loadDIS)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
191
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 # highlight the corresponding entry
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
193 QTimer.singleShot(0, self.__selectItemForEditorLine)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
194
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
195 def __editorLanguageChanged(self, editor):
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
196 """
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
197 Private slot to handle a change of the editor language.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
198
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
199 @param editor reference to the editor which changed language
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
200 @type Editor
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
201 """
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
202 if editor is self.__editor:
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
203 QTimer.singleShot(0, self.__loadDIS)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
204
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 def __lastEditorClosed(self):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 Private slot to handle the last editor closed signal of the view
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 manager.
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 self.hide()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
211
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 def show(self):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 Public slot to show the DIS viewer.
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
216 super().show()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
217
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
218 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
219 self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
220 and not self.__vmConnected
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
221 ):
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 self.__vm.editorChangedEd.connect(self.__editorChanged)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 self.__vm.editorSavedEd.connect(self.__editorSaved)
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
224 self.__vm.editorLineChangedEd.connect(self.__editorLineChanged)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
225 self.__vm.editorLanguageChanged.connect(self.__editorLanguageChanged)
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 self.__vmConnected = True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
227
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
228 self.__styleLabels()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
229
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 def hide(self):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 Public slot to hide the DIS viewer.
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
234 super().hide()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
235
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 if self.__editor:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 self.__editor.clearAllHighlights()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
238
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
239 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY and self.__vmConnected:
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 self.__vm.editorChangedEd.disconnect(self.__editorChanged)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 self.__vm.editorSavedEd.disconnect(self.__editorSaved)
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
242 self.__vm.editorLineChangedEd.disconnect(self.__editorLineChanged)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
243 self.__vm.editorLanguageChanged.disconnect(self.__editorLanguageChanged)
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 self.__vmConnected = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
245
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 def shutdown(self):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 Public method to perform shutdown actions.
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 self.__editor = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
251
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 def __disViewerStateChanged(self, on):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 Private slot to toggle the display of the Disassembly viewer.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
255
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 @param on flag indicating to show the Disassembly
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 @type bool
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 """
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
259 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
260 editor = self.__vm.activeWindow()
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
261 if on:
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
262 if editor is not self.__editor:
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
263 self.__editor = editor
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
264 self.show()
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
265 self.__loadDIS()
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
266 else:
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
267 self.hide()
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
268 self.__editor = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
269
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
270 def __expandAllDis(self):
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
271 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
272 Private slot to expand all items of the disassembly widget.
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
273 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
274 block = self.disWidget.blockSignals(True)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
275 self.disWidget.expandAll()
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
276 self.disWidget.blockSignals(block)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
277 self.__resizeDisColumns()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
278
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
279 def __collapseAllDis(self):
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
280 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
281 Private slot to collapse all items of the disassembly widget.
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
282 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
283 block = self.disWidget.blockSignals(True)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
284 self.disWidget.collapseAll()
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
285 self.disWidget.blockSignals(block)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
286 self.__resizeDisColumns()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
287
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 def __createErrorItem(self, error):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 Private method to create a top level error item.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
291
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 @param error error message
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 @type str
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 @return generated item
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 @rtype QTreeWidgetItem
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
297 itm = QTreeWidgetItem(self.disWidget, [error])
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 itm.setFirstColumnSpanned(True)
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
299 itm.setForeground(0, self.__errorColor)
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 return itm
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
301
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
302 def __createTitleItem(self, title, line, parentItem):
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 Private method to create a title item.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
305
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 @param title titel string for the item
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 @type str
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 @param line start line of the titled disassembly
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 @type int
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
310 @param parentItem reference to the parent item
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
311 @type QTreeWidget or QTreeWidgetItem
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 @return generated item
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 @rtype QTreeWidgetItem
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 """
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
315 itm = QTreeWidgetItem(parentItem, [title])
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 itm.setFirstColumnSpanned(True)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 itm.setExpanded(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
318
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 itm.setData(0, self.StartLineRole, line)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 itm.setData(0, self.EndLineRole, line)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
321
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 return itm
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
323
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 def __createInstructionItem(self, instr, parent, lasti=-1):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 Private method to create an item for the given instruction.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
327
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 @param instr instruction the item should be based on
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 @type dis.Instruction
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 @param parent reference to the parent item
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 @type QTreeWidgetItem
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 @param lasti index of the instruction of a traceback
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 @type int
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 @return generated item
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 @rtype QTreeWidgetItem
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 fields = []
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 # Column: Source code line number (right aligned)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 if instr.starts_line:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 fields.append("{0:d}".format(instr.starts_line))
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 else:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 fields.append("")
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 # Column: Instruction offset from start of code sequence
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 # (right aligned)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 fields.append("{0:d}".format(instr.offset))
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 # Column: Opcode name
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 fields.append(instr.opname)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 # Column: Opcode argument (right aligned)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 if instr.arg is not None:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 fields.append(repr(instr.arg))
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 # Column: Opcode argument details
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 if instr.argrepr:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
353 fields.append("(" + instr.argrepr + ")")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
354
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 itm = QTreeWidgetItem(parent, fields)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 for col in (0, 1, 3):
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
357 itm.setTextAlignment(col, Qt.AlignmentFlag.AlignRight)
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
358 # set font to indicate current instruction and jump target
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 font = itm.font(0)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 if instr.offset == lasti:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 font.setItalic(True)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 if instr.is_jump_target:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 font.setBold(True)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 for col in range(itm.columnCount()):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 itm.setFont(col, font)
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
366 # set color to indicate current instruction or jump target
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
367 if instr.offset == lasti:
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
368 foreground = self.__currentInstructionColor
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
369 elif instr.is_jump_target:
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
370 foreground = self.__jumpTargetColor
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
371 else:
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
372 foreground = None
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
373 if foreground:
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
374 for col in range(itm.columnCount()):
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
375 itm.setForeground(col, foreground)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
376
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 itm.setExpanded(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
378
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 if instr.starts_line:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 itm.setData(0, self.StartLineRole, instr.starts_line)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 itm.setData(0, self.EndLineRole, instr.starts_line)
9026
2cba3f220ef5 Fixed an issue in DisViewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
382 elif parent is not None:
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 # get line from parent (= start line)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 lineno = parent.data(0, self.StartLineRole)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 itm.setData(0, self.StartLineRole, lineno)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 itm.setData(0, self.EndLineRole, lineno)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 return itm
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
388
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 def __updateItemEndLine(self, itm):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 Private method to update an items end line based on its children.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
392
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 @param itm reference to the item to be updated
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 @type QTreeWidgetItem
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 """
8260
2161475d9639 Applied some more code simplifications suggested by the new Simplify checker (Y108: use ternary operator).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8235
diff changeset
396 endLine = (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
397 max(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
398 itm.child(index).data(0, self.EndLineRole)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
399 for index in range(itm.childCount())
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
400 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
401 if itm.childCount()
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
402 else itm.data(0, self.StartLineRole)
8260
2161475d9639 Applied some more code simplifications suggested by the new Simplify checker (Y108: use ternary operator).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8235
diff changeset
403 )
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 itm.setData(0, self.EndLineRole, endLine)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
405
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
406 def __createCodeInfo(self, co):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
407 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
408 Private method to create a dictionary containing the code info data.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
409
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
410 @param co reference to the code object to generate the info for
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
411 @type code
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
412 @return dictionary containing the code info data
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
413 @rtype dict
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
414 """
7714
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7712
diff changeset
415 codeInfoDict = {
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
416 "name": co.co_name,
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
417 "filename": co.co_filename,
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
418 "firstlineno": co.co_firstlineno,
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
419 "argcount": co.co_argcount,
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
420 "kwonlyargcount": co.co_kwonlyargcount,
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
421 "nlocals": co.co_nlocals,
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
422 "stacksize": co.co_stacksize,
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
423 "flags": dis.pretty_flags(co.co_flags),
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
424 "consts": [str(const) for const in co.co_consts],
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
425 "names": [str(name) for name in co.co_names],
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
426 "varnames": [str(name) for name in co.co_varnames],
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
427 "freevars": [str(var) for var in co.co_freevars],
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
428 "cellvars": [str(var) for var in co.co_cellvars],
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
429 }
7714
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7712
diff changeset
430 try:
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7712
diff changeset
431 codeInfoDict["posonlyargcount"] = co.co_posonlyargcount
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7712
diff changeset
432 except AttributeError:
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7712
diff changeset
433 # does not exist prior to 3.8.0
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7712
diff changeset
434 codeInfoDict["posonlyargcount"] = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
435
7732
4c9cf117acf6 Fixed some code style issues and one coding issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7714
diff changeset
436 return codeInfoDict
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
437
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 def __loadDIS(self):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 Private method to generate the Disassembly from the source of the
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 current editor and visualize it.
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 """
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8260
diff changeset
443 if self.__mode != PythonDisViewerModes.SOURCEDISASSEMBLY:
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
444 # wrong mode, just return
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
445 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
446
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 if not self.__editor:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
448 self.__createErrorItem(self.tr("No editor has been opened."))
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
450
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
451 self.clear()
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 self.__editor.clearAllHighlights()
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
453 self.codeInfoWidget.hide()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
454
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
455 source = self.__editor.text()
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
456 if not source.strip():
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
457 # empty editor or white space only
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
458 self.__createErrorItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
459 self.tr("The current editor does not contain any source code.")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
460 )
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
462
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
463 if not self.__editor.isPyFile():
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
464 self.__createErrorItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
465 self.tr("The current editor does not contain Python source code.")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
466 )
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
468
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 filename = self.__editor.getFileName()
8235
78e6d29eb773 Applied some more code simplifications suggested by the new Simplify checker (Y108: use ternary operator) (batch 3).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8227
diff changeset
470 filename = os.path.basename(filename) if filename else "<dis>"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
471
8356
68ec9c3d4de5 Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8318
diff changeset
472 with EricOverrideCursor():
7771
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
473 try:
8539
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
474 codeObject = tryCompile(source, filename)
7771
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
475 except Exception as exc:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
476 codeObject = None
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
477 self.__createErrorItem(str(exc))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
478
7771
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
479 if codeObject:
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
480 self.setUpdatesEnabled(False)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
481 block = self.disWidget.blockSignals(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
482
7771
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
483 self.__disassembleObject(codeObject, self.disWidget, filename)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
484 QTimer.singleShot(0, self.__resizeDisColumns)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
485
7771
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
486 self.disWidget.blockSignals(block)
787a6b3f8c9f Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7732
diff changeset
487 self.setUpdatesEnabled(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
488
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
489 @pyqtSlot(dict)
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
490 def showDisassembly(self, disassembly):
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
491 """
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
492 Public slot to receive a code disassembly from the debug client.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
493
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
494 @param disassembly dictionary containing the disassembly information
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
495 @type dict
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
496 """
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
497 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
498 self.__mode == PythonDisViewerModes.TRACEBACK
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
499 and disassembly
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
500 and "instructions" in disassembly
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
501 and disassembly["instructions"]
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
502 ):
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
503 self.disWidget.clear()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
504
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
505 self.setUpdatesEnabled(False)
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
506 block = self.disWidget.blockSignals(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
507
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
508 titleItem = self.__createTitleItem(
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
509 self.tr("Disassembly of last traceback"),
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
510 disassembly["firstlineno"],
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
511 self.disWidget,
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
512 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
513
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
514 lasti = disassembly["lasti"]
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
515 lastStartItem = None
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
516 for instrDict in disassembly["instructions"]:
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
517 instr = dis.Instruction(
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
518 instrDict["opname"],
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
519 0, # dummy value
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
520 instrDict["arg"],
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
521 "", # dummy value
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
522 instrDict["argrepr"],
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
523 instrDict["offset"],
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
524 instrDict["lineno"],
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
525 instrDict["isJumpTarget"],
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
526 )
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
527 if instrDict["lineno"] > 0:
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
528 if lastStartItem:
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
529 self.__updateItemEndLine(lastStartItem)
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
530 lastStartItem = self.__createInstructionItem(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
531 instr, titleItem, lasti=lasti
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
532 )
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
533 else:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
534 self.__createInstructionItem(instr, lastStartItem, lasti=lasti)
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
535 if lastStartItem:
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
536 self.__updateItemEndLine(lastStartItem)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
537
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
538 QTimer.singleShot(0, self.__resizeDisColumns)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
539
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
540 self.disWidget.blockSignals(block)
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
541 self.setUpdatesEnabled(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
542
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
543 if lasti:
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
544 lastInstructions = self.disWidget.findItems(
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
545 "{0:d}".format(lasti),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
546 Qt.MatchFlag.MatchFixedString | Qt.MatchFlag.MatchRecursive,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
547 1,
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
548 )
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
549 if lastInstructions:
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
550 self.disWidget.scrollToItem(
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
551 lastInstructions[0],
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
552 QAbstractItemView.ScrollHint.PositionAtCenter,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
553 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
554
8227
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
555 if "codeinfo" in disassembly:
349308e84eeb Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
556 self.__showCodeInfoData(disassembly["codeinfo"])
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
557
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
558 def __resizeDisColumns(self):
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
559 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
560 Private method to resize the columns of the disassembly widget to
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
561 suitable values.
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
562 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
563 for col in range(self.disWidget.columnCount()):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
564 self.disWidget.resizeColumnToContents(col)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
565
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
566 def resizeEvent(self, evt):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
567 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
568 Protected method to handle resize events.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
569
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
570 @param evt resize event
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
571 @type QResizeEvent
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
572 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
573 # just adjust the sizes of the columns
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
574 self.__resizeDisColumns()
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
575 self.__resizeCodeInfoColumns()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
576
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
577 def __clearSelection(self):
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
578 """
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
579 Private method to clear all selected items.
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
580 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
581 for itm in self.disWidget.selectedItems():
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
582 itm.setSelected(False)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
583
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
584 def __selectChildren(self, itm, lineno):
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
585 """
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
586 Private method to select children of the given item covering the given
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
587 line number.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
588
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
589 @param itm reference to the item
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
590 @type QTreeWidgetItem
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
591 @param lineno line number to base the selection on
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
592 @type int
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
593 """
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
594 for index in range(itm.childCount()):
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
595 child = itm.child(index)
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
596 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
597 child.data(0, self.StartLineRole)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
598 <= lineno
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
599 <= child.data(0, self.EndLineRole)
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
600 ):
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
601 child.setSelected(True)
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
602 self.__selectChildren(child, lineno)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
603
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
604 if child.data(0, self.StartLineRole) == lineno:
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
605 self.disWidget.scrollToItem(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
606 child, QAbstractItemView.ScrollHint.PositionAtCenter
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
607 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
608
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
609 def __selectItemForEditorLine(self):
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
610 """
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
611 Private slot to select the items corresponding with the cursor line
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
612 of the current editor.
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
613 """
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
614 # step 1: clear all selected items
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
615 self.__clearSelection()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
616
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
617 # step 2: retrieve the editor cursor line
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
618 cline, cindex = self.__editor.getCursorPosition()
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
619 # make the line numbers 1-based
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
620 cline += 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
621
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
622 for index in range(self.disWidget.topLevelItemCount()):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
623 itm = self.disWidget.topLevelItem(index)
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
624 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
625 itm.data(0, self.StartLineRole)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
626 <= cline
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
627 <= itm.data(0, self.EndLineRole)
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
628 ):
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
629 itm.setSelected(True)
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
630 self.__selectChildren(itm, cline)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
631
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
632 @pyqtSlot(QTreeWidgetItem, int)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
633 def __disItemClicked(self, itm, column):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
634 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
635 Private slot handling a user click on a Disassembly node item.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
636
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
637 @param itm reference to the clicked item
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
638 @type QTreeWidgetItem
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
639 @param column column number of the click
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
640 @type int
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
641 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
642 self.__editor.clearAllHighlights()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
643
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
644 if itm is not None:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
645 startLine = itm.data(0, self.StartLineRole)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
646 endLine = itm.data(0, self.EndLineRole)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
647
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
648 self.__editor.gotoLine(startLine, firstVisible=True, expand=True)
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
649 self.__editor.setHighlight(startLine - 1, 0, endLine, -1)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
650
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
651 def __disassembleObject(self, co, parentItem, parentName="", lasti=-1):
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
652 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
653 Private method to disassemble the given code object recursively.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
654
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
655 @param co code object to be disassembled
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
656 @type code object
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
657 @param parentItem reference to the parent item
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
658 @type QTreeWidget or QTreeWidgetItem
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
659 @param parentName name of the parent code object
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
660 @type str
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
661 @param lasti index of the instruction of a traceback
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
662 @type int
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
663 """
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
664 if co.co_name == "<module>":
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
665 title = os.path.basename(co.co_filename)
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
666 name = ""
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
667 else:
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
668 if parentName:
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
669 name = "{0}.{1}".format(parentName, co.co_name)
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
670 else:
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
671 name = co.co_name
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
672 title = self.tr("Code Object '{0}'").format(name)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
673 titleItem = self.__createTitleItem(title, co.co_firstlineno, parentItem)
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
674 codeInfo = self.__createCodeInfo(co)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
675 if codeInfo:
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
676 titleItem.setData(0, self.CodeInfoRole, codeInfo)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
677
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
678 lastStartItem = None
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
679 for instr in dis.get_instructions(co):
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
680 if instr.starts_line:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
681 if lastStartItem:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
682 self.__updateItemEndLine(lastStartItem)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
683 lastStartItem = self.__createInstructionItem(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
684 instr, titleItem, lasti=lasti
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
685 )
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
686 else:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
687 self.__createInstructionItem(instr, lastStartItem, lasti=lasti)
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
688 if lastStartItem:
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
689 self.__updateItemEndLine(lastStartItem)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
690
7704
9251c4dc4f7a Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
691 for x in co.co_consts:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
692 if hasattr(x, "co_code"):
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
693 self.__disassembleObject(x, titleItem, parentName=name, lasti=lasti)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
694
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
695 self.__updateItemEndLine(titleItem)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
696
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
697 @pyqtSlot()
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
698 def preferencesChanged(self):
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
699 """
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
700 Public slot handling changes of the Disassembly viewer settings.
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
701 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
702 self.__errorColor = QBrush(Preferences.getPython("DisViewerErrorColor"))
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
703 self.__currentInstructionColor = QBrush(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
704 Preferences.getPython("DisViewerCurrentColor")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
705 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
706 self.__jumpTargetColor = QBrush(Preferences.getPython("DisViewerLabeledColor"))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
707
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
708 self.__showCodeInfoDetails = Preferences.getPython(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
709 "DisViewerExpandCodeInfoDetails"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
710 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
711
7705
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
712 if self.isVisible():
90a9aefd4253 Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7704
diff changeset
713 self.__loadDIS()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
714
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
715 self.__styleLabels()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
716
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
717 def __styleLabels(self):
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
718 """
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
719 Private method to style the info labels iaw. selected colors.
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
720 """
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
721 # current instruction
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
722 self.currentInfoLabel.setStyleSheet(
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
723 "QLabel {{ color : {0}; }}".format(
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
724 self.__currentInstructionColor.color().name()
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
725 )
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
726 )
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
727 font = self.currentInfoLabel.font()
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
728 font.setItalic(True)
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
729 self.currentInfoLabel.setFont(font)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
730
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
731 # labeled instruction
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
732 self.labeledInfoLabel.setStyleSheet(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
733 "QLabel {{ color : {0}; }}".format(self.__jumpTargetColor.color().name())
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
734 )
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
735 font = self.labeledInfoLabel.font()
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
736 font.setBold(True)
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
737 self.labeledInfoLabel.setFont(font)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
738
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
739 @pyqtSlot()
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
740 def clear(self):
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
741 """
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
742 Public method to clear the display.
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7705
diff changeset
743 """
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
744 self.disWidget.clear()
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
745 self.codeInfoWidget.clear()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
746
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
747 def __showCodeInfo(self):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
748 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
749 Private slot handling the context menu action to show code info.
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
750 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
751 itm = self.disWidget.currentItem()
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
752 codeInfo = itm.data(0, self.CodeInfoRole)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
753 if codeInfo:
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
754 self.codeInfoWidget.show()
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
755 self.__showCodeInfoData(codeInfo)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
756
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
757 def __showCodeInfoData(self, codeInfo):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
758 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
759 Private method to show the passed code info data.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
760
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
761 @param codeInfo dictionary containing the code info data
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
762 @type dict
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
763 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
764
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
765 def createCodeInfoItems(title, infoList):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
766 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
767 Function to create code info items for the given list.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
768
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
769 @param title title string for the list
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
770 @type str
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
771 @param infoList list of info strings
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
772 @type list of str
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
773 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
774 parent = QTreeWidgetItem(self.codeInfoWidget, [title, str(len(infoList))])
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
775 parent.setExpanded(self.__showCodeInfoDetails)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
776
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
777 for index, value in enumerate(infoList):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
778 itm = QTreeWidgetItem(parent, [str(index), str(value)])
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
779 itm.setTextAlignment(0, Qt.AlignmentFlag.AlignRight)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
780
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
781 self.codeInfoWidget.clear()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
782
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
783 if codeInfo:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
784 QTreeWidgetItem(self.codeInfoWidget, [self.tr("Name"), codeInfo["name"]])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
785 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
786 self.codeInfoWidget, [self.tr("Filename"), codeInfo["filename"]]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
787 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
788 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
789 self.codeInfoWidget,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
790 [self.tr("First Line"), str(codeInfo["firstlineno"])],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
791 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
792 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
793 self.codeInfoWidget,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
794 [self.tr("Argument Count"), str(codeInfo["argcount"])],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
795 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
796 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
797 self.codeInfoWidget,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
798 [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
799 self.tr("Positional-only Arguments"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
800 str(codeInfo["posonlyargcount"]),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
801 ],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
802 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
803 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
804 self.codeInfoWidget,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
805 [self.tr("Keyword-only Arguments"), str(codeInfo["kwonlyargcount"])],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
806 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
807 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
808 self.codeInfoWidget,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
809 [self.tr("Number of Locals"), str(codeInfo["nlocals"])],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
810 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
811 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
812 self.codeInfoWidget, [self.tr("Stack Size"), str(codeInfo["stacksize"])]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
813 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
814 QTreeWidgetItem(self.codeInfoWidget, [self.tr("Flags"), codeInfo["flags"]])
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
815 if codeInfo["consts"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
816 createCodeInfoItems(self.tr("Constants"), codeInfo["consts"])
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
817 if codeInfo["names"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
818 createCodeInfoItems(self.tr("Names"), codeInfo["names"])
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
819 if codeInfo["varnames"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
820 createCodeInfoItems(self.tr("Variable Names"), codeInfo["varnames"])
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
821 if codeInfo["freevars"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
822 createCodeInfoItems(self.tr("Free Variables"), codeInfo["freevars"])
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
823 if codeInfo["cellvars"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
824 createCodeInfoItems(self.tr("Cell Variables"), codeInfo["cellvars"])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
825
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
826 QTimer.singleShot(0, self.__resizeCodeInfoColumns)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
827
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
828 def __resizeCodeInfoColumns(self):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
829 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
830 Private method to resize the columns of the code info widget to
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
831 suitable values.
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
832 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
833 for col in range(self.codeInfoWidget.columnCount()):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
834 self.codeInfoWidget.resizeColumnToContents(col)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
835
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
836 def __expandAllCodeInfo(self):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
837 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
838 Private slot to expand all items of the code info widget.
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
839 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
840 block = self.codeInfoWidget.blockSignals(True)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
841 self.codeInfoWidget.expandAll()
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
842 self.codeInfoWidget.blockSignals(block)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
843 self.__resizeCodeInfoColumns()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
844
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
845 def __collapseAllCodeInfo(self):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
846 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
847 Private slot to collapse all items of the code info widget.
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
848 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
849 block = self.codeInfoWidget.blockSignals(True)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
850 self.codeInfoWidget.collapseAll()
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
851 self.codeInfoWidget.blockSignals(block)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
852 self.__resizeCodeInfoColumns()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
853
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
854 def __codeInfoContextMenuRequested(self, coord):
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
855 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
856 Private slot to show the context menu of the code info widget.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
857
7710
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
858 @param coord position of the mouse pointer
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
859 @type QPoint
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
860 """
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
861 if self.disWidget.topLevelItemCount() > 0:
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
862 # don't show context menu on empty list
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
863 coord = self.codeInfoWidget.mapToGlobal(coord)
9aad21c7765d PythonDisViewer: started implementing a code info widget to show data about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
864 self.__codeInfoMenu.popup(coord)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
865
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
866 def __configure(self):
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
867 """
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
868 Private method to open the configuration dialog.
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7710
diff changeset
869 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
870 ericApp().getObject("UserInterface").showPreferences("pythonPage")
8539
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
871
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
872
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
873 def tryCompile(source, name):
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
874 """
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
875 Function to attempt to compile the given source, first as an
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
876 expression and then as a statement if the first approach fails.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
877
8539
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
878 @param source source code string to be compiled
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
879 @type str
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
880 @param name name of the file containing the source
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
881 @type str
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
882 @return compiled code
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
883 @rtype code object
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
884 """
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
885 try:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
886 c = compile(source, name, "eval")
8539
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
887 except SyntaxError:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
888 c = compile(source, name, "exec")
8539
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
889 return c
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
890
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
891
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
892 def linestarts(co, filename="", getall=True):
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
893 """
8541
927d57b6aae0 Updated source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8539
diff changeset
894 Function to get the line starts for the given code object.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
895
8539
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
896 @param co reference to the compiled code object or the source code
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
897 @type code object or str
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
898 @param filename name of the source file (optional)
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
899 @type str
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
900 @param getall flag indicating to get all line starts recursively
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
901 @type bool
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
902 @return list of lines starting some byte code instruction block
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
903 @rtype list of int
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
904 """
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
905 if isinstance(co, str):
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
906 # try to compile the given source code first
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
907 try:
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
908 fn = filename if filename else "<dis>"
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
909 co = tryCompile(co, fn)
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
910 except SyntaxError:
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
911 return []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
912
8539
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
913 starts = [inst[1] for inst in dis.findlinestarts(co)]
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
914 if getall:
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
915 for x in co.co_consts:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
916 if hasattr(x, "co_code"):
8539
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
917 starts.extend(linestarts(x))
24daea9ad41b Editor: added code to move a breakpoint to a line actually creating some byte code (Python only).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
918 return sorted(starts)

eric ide

mercurial