@@ -522,13 +522,13 @@ def sysmon_py_return(
522522 if self .stats is not None :
523523 self .stats ["returns" ] += 1
524524 code_info = self .code_infos .get (id (code ))
525- if code_info is not None and code_info .file_data is not None :
526- assert code_info . byte_to_line is not None
527- last_line = code_info .byte_to_line [instruction_offset ]
528- if last_line is not None :
529- arc = (last_line , - code .co_firstlineno )
530- cast ( set [ TArc ], code_info .file_data ) .add (arc )
531- # log(f"adding {arc=}")
525+ # code_info is not None and code_info.file_data is not None, since we
526+ # wouldn't have enabled this event if they were.
527+ last_line = code_info .byte_to_line [instruction_offset ] # type: ignore
528+ if last_line is not None :
529+ arc = (last_line , - code .co_firstlineno )
530+ code_info .file_data .add (arc ) # type: ignore
531+ # log(f"adding {arc=}")
532532 return DISABLE
533533
534534 @panopticon ("code" , "line" )
@@ -537,9 +537,12 @@ def sysmon_line_lines(self, code: CodeType, line_number: TLineNo) -> MonitorRetu
537537 if self .stats is not None :
538538 self .stats ["line_lines" ] += 1
539539 code_info = self .code_infos .get (id (code ))
540+ # It should be true that code_info is not None and code_info.file_data
541+ # is not None, since we wouldn't have enabled this event if they were.
542+ # But somehow code_info can be None here, so we have to check.
540543 if code_info is not None and code_info .file_data is not None :
541- cast ( set [ TLineNo ], code_info .file_data ) .add (line_number )
542- # log(f"adding {line_number=}")
544+ code_info .file_data .add (line_number ) # type: ignore
545+ # log(f"adding {line_number=}")
543546 return DISABLE
544547
545548 @panopticon ("code" , "line" )
@@ -548,10 +551,11 @@ def sysmon_line_arcs(self, code: CodeType, line_number: TLineNo) -> MonitorRetur
548551 if self .stats is not None :
549552 self .stats ["line_arcs" ] += 1
550553 code_info = self .code_infos [id (code )]
551- if code_info .file_data is not None :
552- arc = (line_number , line_number )
553- cast (set [TArc ], code_info .file_data ).add (arc )
554- # log(f"adding {arc=}")
554+ # code_info is not None and code_info.file_data is not None, since we
555+ # wouldn't have enabled this event if they were.
556+ arc = (line_number , line_number )
557+ code_info .file_data .add (arc ) # type: ignore
558+ # log(f"adding {arc=}")
555559 return DISABLE
556560
557561 @panopticon ("code" , "@" , "@" )
@@ -562,33 +566,34 @@ def sysmon_branch_either(
562566 if self .stats is not None :
563567 self .stats ["branches" ] += 1
564568 code_info = self .code_infos [id (code )]
565- if code_info .file_data is not None :
566- if not code_info .branch_trails :
567- if self .stats is not None :
568- self .stats ["branch_trails" ] += 1
569- populate_branch_trails (code , code_info )
570- # log(f"branch_trails for {code}:\n {code_info.branch_trails}")
571- added_arc = False
572- dest_info = code_info .branch_trails .get (instruction_offset )
573- # log(f"{dest_info = }")
574- if dest_info is not None :
575- for offsets , arc in dest_info :
576- if arc is None :
577- continue
578- if destination_offset in offsets :
579- cast (set [TArc ], code_info .file_data ).add (arc )
580- # log(f"adding {arc=}")
581- added_arc = True
582- break
583-
584- if not added_arc :
585- # This could be an exception jumping from line to line.
586- assert code_info .byte_to_line is not None
587- l1 = code_info .byte_to_line [instruction_offset ]
588- l2 = code_info .byte_to_line [destination_offset ]
589- if l1 != l2 :
590- arc = (l1 , l2 )
591- cast (set [TArc ], code_info .file_data ).add (arc )
592- # log(f"adding unforeseen {arc=}")
569+ # code_info is not None and code_info.file_data is not None, since we
570+ # wouldn't have enabled this event if they were.
571+ if not code_info .branch_trails :
572+ if self .stats is not None :
573+ self .stats ["branch_trails" ] += 1
574+ populate_branch_trails (code , code_info )
575+ # log(f"branch_trails for {code}:\n {code_info.branch_trails}")
576+ added_arc = False
577+ dest_info = code_info .branch_trails .get (instruction_offset )
578+ # log(f"{dest_info = }")
579+ if dest_info is not None :
580+ for offsets , arc in dest_info :
581+ if arc is None :
582+ continue
583+ if destination_offset in offsets :
584+ code_info .file_data .add (arc ) # type: ignore
585+ # log(f"adding {arc=}")
586+ added_arc = True
587+ break
588+
589+ if not added_arc :
590+ # This could be an exception jumping from line to line.
591+ assert code_info .byte_to_line is not None
592+ l1 = code_info .byte_to_line [instruction_offset ]
593+ l2 = code_info .byte_to_line [destination_offset ]
594+ if l1 != l2 :
595+ arc = (l1 , l2 )
596+ code_info .file_data .add (arc ) # type: ignore
597+ # log(f"adding unforeseen {arc=}")
593598
594599 return DISABLE
0 commit comments