9 """ |
9 """ |
10 |
10 |
11 import dis |
11 import dis |
12 import enum |
12 import enum |
13 import os |
13 import os |
|
14 import sys |
14 |
15 |
15 from PyQt6.QtCore import Qt, QTimer, pyqtSlot |
16 from PyQt6.QtCore import Qt, QTimer, pyqtSlot |
16 from PyQt6.QtGui import QBrush |
17 from PyQt6.QtGui import QBrush |
17 from PyQt6.QtWidgets import QAbstractItemView, QMenu, QTreeWidgetItem, QWidget |
18 from PyQt6.QtWidgets import QAbstractItemView, QMenu, QTreeWidgetItem, QWidget |
18 |
19 |
335 @rtype QTreeWidgetItem |
336 @rtype QTreeWidgetItem |
336 """ |
337 """ |
337 fields = [] |
338 fields = [] |
338 # Column: Source code line number (right aligned) |
339 # Column: Source code line number (right aligned) |
339 if instr.starts_line: |
340 if instr.starts_line: |
340 fields.append("{0:d}".format(instr.starts_line)) |
341 fields.append( |
|
342 "{0:d}".format( |
|
343 instr.starts_line |
|
344 if sys.version_info < (3, 13) |
|
345 else instr.line_number |
|
346 ) |
|
347 ) |
341 else: |
348 else: |
342 fields.append("") |
349 fields.append("") |
343 # Column: Instruction offset from start of code sequence |
350 # Column: Instruction offset from start of code sequence |
344 # (right aligned) |
351 # (right aligned) |
345 fields.append("{0:d}".format(instr.offset)) |
352 fields.append("{0:d}".format(instr.offset)) |
512 ) |
519 ) |
513 |
520 |
514 lasti = disassembly["lasti"] |
521 lasti = disassembly["lasti"] |
515 lastStartItem = None |
522 lastStartItem = None |
516 for instrDict in disassembly["instructions"]: |
523 for instrDict in disassembly["instructions"]: |
517 instr = dis.Instruction( |
524 instr = ( |
518 instrDict["opname"], |
525 dis.Instruction( |
519 0, # dummy value |
526 instrDict["opname"], |
520 instrDict["arg"], |
527 0, # dummy value |
521 "", # dummy value |
528 instrDict["arg"], |
522 instrDict["argrepr"], |
529 "", # dummy value |
523 instrDict["offset"], |
530 instrDict["argrepr"], |
524 instrDict["lineno"], |
531 instrDict["offset"], |
525 instrDict["isJumpTarget"], |
532 instrDict["lineno"], |
|
533 instrDict["isJumpTarget"], |
|
534 ) |
|
535 if sys.version_info < (3, 13, 0) |
|
536 else dis.Instruction( |
|
537 instrDict["opname"], |
|
538 0, # dummy value |
|
539 instrDict["arg"], |
|
540 "", # dummy value |
|
541 instrDict["argrepr"], |
|
542 instrDict["offset"], |
|
543 instrDict["offset"], |
|
544 instrDict["starts_line"], |
|
545 instrDict["lineno"], |
|
546 instrDict["label"] if instrDict["label"] else None, |
|
547 ) |
526 ) |
548 ) |
527 if instrDict["lineno"] > 0: |
549 if instrDict["lineno"] > 0: |
528 if lastStartItem: |
550 if lastStartItem: |
529 self.__updateItemEndLine(lastStartItem) |
551 self.__updateItemEndLine(lastStartItem) |
530 lastStartItem = self.__createInstructionItem( |
552 lastStartItem = self.__createInstructionItem( |