VDBInstructionBasicBlock.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 20 Aug 2018 11:00:23 +0100
changeset 94 e76206d071fc
parent 93 bd0a7febf26d
child 96 40094b870074
permissions -rw-r--r--
UX: Allow to set a font for text, list views and pinned menus ...independently from `CodeView`'s default font and `MenuPanel`s default font. This is mostly useful for demos :-)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
jv:vdb - Visual / VM Debugger
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Copyright (C) 2015-now Jan Vrany
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
"{ Package: 'jv:vdb' }"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
"{ NameSpace: Smalltalk }"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
Object subclass:#VDBInstructionBasicBlock
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
	instanceVariableNames:'instructions precedessors successor1 successor2'
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
	classVariableNames:''
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
	poolDictionaries:''
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
	category:'VDB-UI-Support'
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
!VDBInstructionBasicBlock class methodsFor:'documentation'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
copyright
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
jv:vdb - Visual / VM Debugger
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
Copyright (C) 2015-now Jan Vrany
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!VDBInstructionBasicBlock class methodsFor:'utilities'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
analyze: instructions
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    "
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
    Analyzes `instructions`, create and connect basic blocks and return
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    them in a collection.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
    `instructions` parameter should be a list of GDBInstruction or 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
    polymorphic objects).
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    "
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
    | blocks curBB firstI |
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
    "/ Pass 1, initial blocks by cutting after each branch
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    "/ or return instruction.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    blocks := OrderedCollection new.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    curBB := VDBInstructionBasicBlock new.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    instructions withIndexDo:[:last :lastI | 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
        firstI isNil ifTrue:[
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
            firstI := lastI
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
        ].
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    53
        last isBranch ifTrue:[
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
            | prevBB |
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
            curBB setInstructions: (instructions copyFrom: firstI to: lastI).
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
            blocks add: curBB.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
            prevBB := curBB.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
            curBB := VDBInstructionBasicBlock new.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
            prevBB setSuccessor1: curBB.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
            firstI := nil.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
        ] ifFalse:[
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    62
        last isReturn ifTrue:[
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
            curBB setInstructions: (instructions copyFrom: firstI to: lastI).
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
            blocks add: curBB.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
            curBB := VDBInstructionBasicBlock new.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
            firstI := nil.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
        ]].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    ].
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    69
    firstI notNil ifTrue:[
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    70
        curBB setInstructions: (instructions copyFrom: firstI).
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    71
        blocks add: curBB.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    72
    ].
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    "/ Pass 2: iterate ober basic blocks and connect successor2 based on
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
    "/ last instructions #branchTargetAddress. If target address points in
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    "/ the middle of basic block, split it.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    blocks copy do:[:bb | 
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    78
        bb last isBranch ifTrue:[
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
            | targetAddress succBB |
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    81
            targetAddress := bb last branchTarget.
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
            "/ Find successor block. Note, that we may found none if the branch target is
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
            "/ outside given coce.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
            succBB := blocks detect:[:e | e includesAddress: targetAddress ] ifNone: [ nil ].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
            succBB notNil ifTrue:[ 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
                "/ If `targetAddress` points into the middle of `succBB` we have to split
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
                "/ succBB into two.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
                succBB firstAddress < targetAddress ifTrue:[ 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
                    | succBBs |
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
                    succBBs := succBB splitAtAddress: targetAddress.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
                    blocks remove: succBB; addAll: succBBs.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
                    succBB := succBBs last.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
                ].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
                bb setSuccessor2: succBB.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
            ].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
        ].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    ].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
    "/ Jo done!!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    ^ blocks.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    ^ blocks
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    "Created: / 27-06-2018 / 13:03:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   108
    "Modified: / 16-08-2018 / 11:36:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
!VDBInstructionBasicBlock methodsFor:'accessing'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
first
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    ^ instructions first
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
    "Created: / 27-06-2018 / 15:41:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
firstAddress
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
    ^ self first address
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
    "Created: / 27-06-2018 / 15:41:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
last
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
    ^ instructions last
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
    "Created: / 27-06-2018 / 15:42:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
lastAddress
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    ^ self last address
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
    "Created: / 27-06-2018 / 15:41:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   135
!
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   136
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   137
precedessors
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   138
    ^ precedessors ? #()
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   139
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   140
    "Modified: / 16-08-2018 / 11:47:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   141
!
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   142
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   143
successor1
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   144
    ^ successor1
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   145
!
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   146
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   147
successor2
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   148
    ^ successor2
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
!VDBInstructionBasicBlock methodsFor:'initialization'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
addPrecedessor: aVDBInstructionBlock
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
    precedessors isNil ifTrue:[ 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
        precedessors := Array with: aVDBInstructionBlock.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
    ] ifFalse:[ 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
        precedessors := precedessors copyWith: aVDBInstructionBlock
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
    ].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
    "Created: / 27-06-2018 / 15:29:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
setInstructions: aCollection
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
    instructions := aCollection
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
    "Created: / 27-06-2018 / 14:59:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
setSuccessor1: aVDBInstructionBasicBlock
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
    successor1 := aVDBInstructionBasicBlock.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
    successor1 addPrecedessor: self.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
    "Created: / 27-06-2018 / 15:28:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
setSuccessor2: aVDBInstructionBasicBlock
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
    successor2 := aVDBInstructionBasicBlock.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
    successor2 addPrecedessor: self.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    "Created: / 27-06-2018 / 15:28:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   183
!VDBInstructionBasicBlock methodsFor:'printing & storing'!
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   184
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   185
printOn:aStream
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   186
    "append a printed representation of the receiver to the argument, aStream"
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   187
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   188
    super printOn:aStream.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   189
    aStream nextPut: $(.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   190
    self firstAddress printOn: aStream base: 16 size: 15 fill: $0.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   191
    aStream nextPutAll: ' - '.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   192
    self lastAddress printOn: aStream base: 16 size: 15 fill: $0.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   193
    successor1 notNil ifTrue:[ 
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   194
        aStream nextPutAll: ' 1> '.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   195
        successor1 firstAddress printOn: aStream base: 16 size: 15 fill: $0.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   196
    ].
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   197
    successor2 notNil ifTrue:[ 
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   198
        aStream nextPutAll: ' 2> '.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   199
        successor2 firstAddress printOn: aStream base: 16 size: 15 fill: $0.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   200
    ].
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   201
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   202
    aStream nextPut: $)
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   203
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   204
    "Modified: / 16-08-2018 / 13:18:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   205
! !
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   206
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
!VDBInstructionBasicBlock methodsFor:'queries'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
includes: instruction
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
    ^ instructions includes: instruction
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
    "Created: / 27-06-2018 / 15:37:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
includesAddress: address
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
    "Return `true`, if this basic block includes an instruction
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
     with given address, false otherwise."
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
    ^ (address between: instructions first address and: instructions last address)
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
    "Created: / 27-06-2018 / 15:40:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
!VDBInstructionBasicBlock methodsFor:'utilities'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
splitAtAddress: address
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
    | splitIdx bb1 bb2 |
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
    splitIdx := instructions indexOf: (instructions detect:[:e | e address = address ] ifNone:[ nil ]).
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    "/ Note, that thhere might not be any instruction with that address, such as
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
    "/ when ill-code jumps into the middle of instruction...
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
    splitIdx == 0 ifTrue:[ 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
        "/ ...in that case, make no split and return self so this case is 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
        "/ transparent to users.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
        ^Array with: self.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
    ].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
    bb1 := self class new setInstructions: (instructions copyTo: splitIdx - 1).
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    bb2 := self class new setInstructions: (instructions copyFrom: splitIdx).
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
    bb1 setSuccessor1: bb2.
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   240
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   241
    precedessors do:[:precedessor | 
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   242
        precedessor successor1 == self ifTrue:[ 
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   243
            precedessor setSuccessor1: bb1.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   244
        ].
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   245
        precedessor successor2 == self ifTrue:[ 
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   246
            precedessor setSuccessor2: bb1.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   247
        ].
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   248
    ].
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
    ^ Array with: bb1 with: bb2.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
    "Created: / 27-06-2018 / 16:00:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   252
    "Modified: / 16-08-2018 / 13:53:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
!VDBInstructionBasicBlock class methodsFor:'documentation'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
version_HG
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
    ^ '$Changeset: <not expanded> $'
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261