VDBInstructionBasicBlock.st
author Jan Vrany <jan.vrany@labware.com>
Fri, 29 Oct 2021 12:19:00 +0100
changeset 237 53a7322c7128
parent 98 8601c1b9e7ba
child 239 a54a9e265c72
permissions -rw-r--r--
FIXUP: UI: add theme support to instruction list
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
237
53a7322c7128 FIXUP: UI: add theme support to instruction list
Jan Vrany <jan.vrany@labware.com>
parents: 98
diff changeset
     4
Copyright (C) 2021 LabWare
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
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
     7
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
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
     9
"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
"{ Package: 'jv:vdb' }"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
"{ NameSpace: Smalltalk }"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
Object subclass:#VDBInstructionBasicBlock
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
	instanceVariableNames:'instructions precedessors successor1 successor2'
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
	classVariableNames:''
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
	poolDictionaries:''
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
	category:'VDB-UI-Support'
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
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
!VDBInstructionBasicBlock class methodsFor:'documentation'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
copyright
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
jv:vdb - Visual / VM Debugger
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
Copyright (C) 2015-now Jan Vrany
237
53a7322c7128 FIXUP: UI: add theme support to instruction list
Jan Vrany <jan.vrany@labware.com>
parents: 98
diff changeset
    27
Copyright (C) 2021 LabWare
80
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
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
    30
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
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
    32
"
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
! !
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
!VDBInstructionBasicBlock class methodsFor:'utilities'!
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
analyze: instructions
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    "
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    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
    40
    them in a collection.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    `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
    43
    polymorphic objects).
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
    | blocks curBB firstI |
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    "/ 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
    48
    "/ or return instruction.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    blocks := OrderedCollection new.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
    curBB := VDBInstructionBasicBlock new.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
    instructions withIndexDo:[:last :lastI | 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
        firstI isNil ifTrue:[
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
            firstI := lastI
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
        ].
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    55
        last isBranch ifTrue:[
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
            | prevBB |
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
            curBB setInstructions: (instructions copyFrom: firstI to: lastI).
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
            blocks add: curBB.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
            prevBB := curBB.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
            curBB := VDBInstructionBasicBlock new.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
            prevBB setSuccessor1: curBB.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
            firstI := nil.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
        ] ifFalse:[
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    64
        last isReturn ifTrue:[
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
            curBB setInstructions: (instructions copyFrom: firstI to: lastI).
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
            blocks add: curBB.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
            curBB := VDBInstructionBasicBlock new.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
            firstI := nil.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
        ]].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    ].
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    71
    firstI notNil ifTrue:[
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    72
        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
    73
        blocks add: curBB.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    74
    ].
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    "/ 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
    77
    "/ 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
    78
    "/ the middle of basic block, split it.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    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
    80
        bb last isBranch ifTrue:[
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
            | targetAddress succBB |
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
    83
            targetAddress := bb last branchTarget.
98
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    84
            targetAddress notNil ifTrue:[
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    85
                "/ Find successor block. Note, that we may found none if the branch target is
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    86
                "/ outside given coce.
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    87
                succBB := blocks detect:[:e | e includesAddress: targetAddress ] ifNone: [ nil ].
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    88
                succBB notNil ifTrue:[ 
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    89
                    "/ If `targetAddress` points into the middle of `succBB` we have to split
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    90
                    "/ succBB into two.
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    91
                    succBB firstAddress < targetAddress ifTrue:[ 
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    92
                        | succBBs |
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
98
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    94
                        succBBs := succBB splitAtAddress: targetAddress.
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    95
                        blocks remove: succBB; addAll: succBBs.
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    96
                        succBB := succBBs last.
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    97
                    ].
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
    98
                    bb setSuccessor2: succBB.
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
                ].
98
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
   100
            ]
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
        ].
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
237
53a7322c7128 FIXUP: UI: add theme support to instruction list
Jan Vrany <jan.vrany@labware.com>
parents: 98
diff changeset
   104
    "/ Job done!!
80
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>"
98
8601c1b9e7ba Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
   108
    "Modified: / 31-08-2018 / 23:50:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
237
53a7322c7128 FIXUP: UI: add theme support to instruction list
Jan Vrany <jan.vrany@labware.com>
parents: 98
diff changeset
   109
    "Modified: / 29-10-2021 / 11:28:30 / Jan Vrany <jan.vrany@labware.com>"
80
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
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
!VDBInstructionBasicBlock methodsFor:'accessing'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
first
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    ^ instructions first
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
    "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
   118
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
firstAddress
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    ^ self first address
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
    "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
   124
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
last
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    ^ instructions last
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    "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
   130
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
lastAddress
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
    ^ self last address
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    "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
   136
!
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   137
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
    ^ precedessors ? #()
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   140
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   141
    "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
   142
!
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   143
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
    ^ successor1
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
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   148
successor2
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   149
    ^ successor2
80
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
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
!VDBInstructionBasicBlock methodsFor:'initialization'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
addPrecedessor: aVDBInstructionBlock
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
    precedessors isNil ifTrue:[ 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
        precedessors := Array with: aVDBInstructionBlock.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
    ] ifFalse:[ 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
        precedessors := precedessors copyWith: aVDBInstructionBlock
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
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
    "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
   162
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
setInstructions: aCollection
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
    instructions := aCollection
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
    "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
   168
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
setSuccessor1: aVDBInstructionBasicBlock
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
    successor1 := aVDBInstructionBasicBlock.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
    successor1 addPrecedessor: self.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
    "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
   175
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
setSuccessor2: aVDBInstructionBasicBlock
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
    successor2 := aVDBInstructionBasicBlock.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
    successor2 addPrecedessor: self.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
    "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
   182
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   184
!VDBInstructionBasicBlock methodsFor:'printing & storing'!
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   185
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   186
printOn:aStream
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   187
    "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
   188
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   189
    super printOn:aStream.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   190
    aStream nextPut: $(.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   191
    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
   192
    aStream nextPutAll: ' - '.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   193
    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
   194
    successor1 notNil ifTrue:[ 
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   195
        aStream nextPutAll: ' 1> '.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   196
        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
   197
    ].
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   198
    successor2 notNil ifTrue:[ 
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   199
        aStream nextPutAll: ' 2> '.
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   200
        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
   201
    ].
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   202
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   203
    aStream nextPut: $)
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   204
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   205
    "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
   206
! !
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   207
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
!VDBInstructionBasicBlock methodsFor:'queries'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
includes: instruction
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    ^ instructions includes: instruction
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
    "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
   214
!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
includesAddress: address
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    "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
   218
     with given address, false otherwise."
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
    ^ (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
   221
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
    "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
   223
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
!VDBInstructionBasicBlock methodsFor:'utilities'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
splitAtAddress: address
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
    | splitIdx bb1 bb2 |
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    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
   231
    "/ 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
   232
    "/ 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
   233
    splitIdx == 0 ifTrue:[ 
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
        "/ ...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
   235
        "/ transparent to users.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
        ^Array with: self.
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
    ].
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    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
   239
    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
   240
    bb1 setSuccessor1: bb2.
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   241
96
40094b870074 Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   242
    precedessors notEmptyOrNil ifTrue:[
40094b870074 Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   243
        precedessors do:[:precedessor | 
40094b870074 Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   244
            precedessor successor1 == self ifTrue:[ 
40094b870074 Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   245
                precedessor setSuccessor1: bb1.
40094b870074 Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   246
            ].
40094b870074 Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   247
            precedessor successor2 == self ifTrue:[ 
40094b870074 Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   248
                precedessor setSuccessor2: bb1.
40094b870074 Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   249
            ].
93
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   250
        ].
bd0a7febf26d UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   251
    ].
80
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
    ^ Array with: bb1 with: bb2.
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
    "Created: / 27-06-2018 / 16:00:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
96
40094b870074 Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   255
    "Modified: / 30-08-2018 / 10:57:26 / 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
   256
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
!VDBInstructionBasicBlock class methodsFor:'documentation'!
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
version_HG
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
    ^ '$Changeset: <not expanded> $'
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
! !
7a9cf1d6be50 UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264